haxe_4.2.4.orig/.github/FUNDING.yml0000644000175000017500000000025314146064214016556 0ustar andyandy00000000000000# These are supported funding model platforms open_collective: haxe custom: ['https://haxe.org/foundation/support-plans.html', 'https://haxe.org/foundation/donate.html'] haxe_4.2.4.orig/.github/workflows/main.yml0000644000175000017500000011627114146064214020455 0ustar andyandy00000000000000# DO NOT EDIT. Generated from /extra/github-actions # TODO: support skip ci (https://github.community/t/github-actions-does-not-respect-skip-ci/17325/8) name: CI on: [push, pull_request] jobs: cancel: name: "Cancel previous runs" runs-on: ubuntu-18.04 timeout-minutes: 3 steps: - uses: styfle/cancel-workflow-action@0.3.1 with: workflow_id: 1447568 access_token: ${{ github.token }} windows64-build: runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 OPAMYES: 1 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ ARCH: 64 MINGW_ARCH: x86_64 CYGWIN_SETUP: https://cygwin.com/setup-x86_64.exe CYG_ROOT: C:/cygwin64 steps: - uses: actions/checkout@main with: submodules: recursive - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: choco install nsis uses: nick-invision/retry@v1 with: timeout_minutes: 10 max_attempts: 10 command: choco install --no-progress nsis.portable --version 3.02 -y - name: choco install things shell: pwsh run: choco install --no-progress curl wget 7zip.portable -y - name: Prepend Chocolatey path shell: pwsh run: Write-Host "::add-path::C:\ProgramData\chocolatey\bin" - name: Install OCaml and OCaml libraries shell: pwsh run: | Set-PSDebug -Trace 1 curl.exe -fsSL -o cygwin-setup.exe --retry 3 $($env:CYGWIN_SETUP) Start-Process -FilePath "cygwin-setup.exe" -ArgumentList "-B -q -R $($env:CYG_ROOT) -l C:/tmp -s $($env:CYG_MIRROR) -P default -P make -P git -P zlib-devel -P rsync -P patch -P diffutils -P curl -P unzip -P tar -P m4 -P perl -P libpcre-devel -P mbedtls-devel -P mingw64-$($env:MINGW_ARCH)-zlib -P mingw64-$($env:MINGW_ARCH)-gcc-core -P mingw64-$($env:MINGW_ARCH)-pcre" -Wait curl.exe -fsSL -o "opam.tar.xz" --retry 3 https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam$($env:ARCH).tar.xz curl.exe -fsSL -o "libmbedtls.tar.xz" --retry 3 https://github.com/Simn/mingw64-mbedtls/releases/download/2.16.3/mingw64-$($env:MINGW_ARCH)-mbedtls-2.16.3-1.tar.xz & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'curl -L https://cpanmin.us | perl - App::cpanminus') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm IPC::System::Simple module') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm String::ShellQuote') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'echo "$OLDPWD"') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -C / -xvf libmbedtls.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -xf opam.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && bash opam${ARCH}/install.sh') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam init mingw "https://github.com/fdopen/opam-repository-mingw.git#opam2" --comp 4.07.0+mingw${ARCH}c --switch 4.07.0+mingw${ARCH}c --auto-setup --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam update --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam pin add haxe . --kind=path --no-action --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam pin add ctypes 0.17.1 --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam install haxe --deps-only --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam list') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'ocamlopt -v') - name: Expose mingw dll files shell: pwsh run: Write-Host "::add-path::${env:CYG_ROOT}/usr/$($env:MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin" - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} shell: pwsh run: echo "ADD_REVISION=1" >> $Env:GITHUB_ENV - name: Build Haxe shell: pwsh run: | Set-PSDebug -Trace 1 & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win -j`nproc` haxe 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win haxelib 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -f Makefile.win echo_package_files package_bin package_installer_win package_choco 2>&1') dir out & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxe.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxelib.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && ls ./out') - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: win${{env.ARCH}}Binaries path: out windows-build: runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows OPAMYES: 1 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ ARCH: 32 MINGW_ARCH: i686 CYGWIN_SETUP: https://cygwin.com/setup-x86.exe CYG_ROOT: C:/cygwin steps: - uses: actions/checkout@main with: submodules: recursive - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: choco install nsis uses: nick-invision/retry@v1 with: timeout_minutes: 10 max_attempts: 10 command: choco install --no-progress nsis.portable --version 3.02 -y - name: choco install things shell: pwsh run: choco install --no-progress curl wget 7zip.portable -y - name: Prepend Chocolatey path shell: pwsh run: Write-Host "::add-path::C:\ProgramData\chocolatey\bin" - name: Install OCaml and OCaml libraries shell: pwsh run: | Set-PSDebug -Trace 1 curl.exe -fsSL -o cygwin-setup.exe --retry 3 $($env:CYGWIN_SETUP) Start-Process -FilePath "cygwin-setup.exe" -ArgumentList "-B -q -R $($env:CYG_ROOT) -l C:/tmp -s $($env:CYG_MIRROR) -P default -P make -P git -P zlib-devel -P rsync -P patch -P diffutils -P curl -P unzip -P tar -P m4 -P perl -P libpcre-devel -P mbedtls-devel -P mingw64-$($env:MINGW_ARCH)-zlib -P mingw64-$($env:MINGW_ARCH)-gcc-core -P mingw64-$($env:MINGW_ARCH)-pcre" -Wait curl.exe -fsSL -o "opam.tar.xz" --retry 3 https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam$($env:ARCH).tar.xz curl.exe -fsSL -o "libmbedtls.tar.xz" --retry 3 https://github.com/Simn/mingw64-mbedtls/releases/download/2.16.3/mingw64-$($env:MINGW_ARCH)-mbedtls-2.16.3-1.tar.xz & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'curl -L https://cpanmin.us | perl - App::cpanminus') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm IPC::System::Simple module') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm String::ShellQuote') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'echo "$OLDPWD"') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -C / -xvf libmbedtls.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -xf opam.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && bash opam${ARCH}/install.sh') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam init mingw "https://github.com/fdopen/opam-repository-mingw.git#opam2" --comp 4.07.0+mingw${ARCH}c --switch 4.07.0+mingw${ARCH}c --auto-setup --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam update --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam pin add haxe . --kind=path --no-action --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam pin add ctypes 0.17.1 --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam install haxe --deps-only --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam list') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'ocamlopt -v') - name: Expose mingw dll files shell: pwsh run: Write-Host "::add-path::${env:CYG_ROOT}/usr/$($env:MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin" - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} shell: pwsh run: echo "ADD_REVISION=1" >> $Env:GITHUB_ENV - name: Build Haxe shell: pwsh run: | Set-PSDebug -Trace 1 & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win -j`nproc` haxe 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win haxelib 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -f Makefile.win echo_package_files package_bin package_installer_win package_choco 2>&1') dir out & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxe.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxelib.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && ls ./out') - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: win${{env.ARCH}}Binaries path: out linux-build: runs-on: ubuntu-18.04 env: PLATFORM: linux64 OPAMYES: 1 steps: - uses: actions/checkout@main with: submodules: recursive - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: Install dependencies run: | set -ex sudo add-apt-repository ppa:avsm/ppa -y # provides OPAM 2 sudo add-apt-repository ppa:haxe/ocaml -y # provides newer version of mbedtls sudo apt-get update -qqy sudo apt-get install -qqy ocaml-nox camlp5 opam libpcre3-dev zlib1g-dev libgtk2.0-dev libmbedtls-dev ninja-build libstring-shellquote-perl - name: Install OCaml libraries run: | set -ex opam init # --disable-sandboxing opam update opam pin add haxe . --no-action opam install haxe --deps-only --assume-depexts opam list ocamlopt -v - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} run: echo "ADD_REVISION=1" >> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`nproc` STATICLINK=1 haxe opam config exec -- make -s haxelib make -s package_unix ls -l out ldd -v ./haxe ldd -v ./haxelib # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Build xmldoc run: | set -ex make -s xmldoc cat >extra/doc/info.json <> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: Install dependencies env: ZLIB_VERSION: 1.2.11 MBEDTLS_VERSION: 2.25.0 PCRE_VERSION: 8.44 run: | set -ex brew uninstall openssl@1.0.2t || echo brew uninstall python@2.7.17 || echo brew untap local/openssl || echo brew untap local/python2 || echo brew update # brew unlink python@2 brew bundle --file=tests/Brewfile --no-upgrade || brew link --overwrite awscli brew install cpanminus cpanm IPC::System::Simple cpanm String::ShellQuote curl -L https://www.zlib.net/zlib-$ZLIB_VERSION.tar.gz | tar xz cd zlib-$ZLIB_VERSION ./configure make && make install curl -L https://github.com/ARMmbed/mbedtls/archive/v$MBEDTLS_VERSION.tar.gz | tar xz cd mbedtls-$MBEDTLS_VERSION make && make install curl -L https://ftp.pcre.org/pub/pcre/pcre-$PCRE_VERSION.tar.gz | tar xz cd pcre-$PCRE_VERSION ./configure --enable-utf8 --enable-pcre8 --enable-pcre16 --enable-pcre32 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2 --enable-jit make && make install - name: Install OCaml libraries run: | set -ex opam init # --disable-sandboxing opam update opam switch create 4.07.1 eval $(opam env) opam env opam pin add ctypes 0.17.1 --yes opam pin add haxe . --no-action opam install haxe --deps-only --assume-depexts opam list ocamlopt -v - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} run: echo "ADD_REVISION=1" >> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`sysctl -n hw.ncpu` STATICLINK=1 "LIB_PARAMS=/usr/local/lib/libz.a /usr/local/lib/libpcre.a /usr/local/lib/libmbedtls.a /usr/local/lib/libmbedcrypto.a /usr/local/lib/libmbedx509.a -cclib '-framework Security -framework CoreFoundation'" haxe opam config exec -- make -s haxelib make -s package_unix package_installer_mac ls -l out otool -L ./haxe otool -L ./haxelib - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: macBinaries path: out windows64-test: needs: windows64-build runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache ARCH: 64 strategy: fail-fast: false matrix: # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024 target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, neko] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: win${{env.ARCH}}Binaries - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 # - name: Quick test # shell: pwsh # run: | # $DOWNLOADDIR="./win$($env:ARCH)Binaries" # new-item -Name $DOWNLOADDIR -ItemType directory # Invoke-WebRequest https://build.haxe.org/builds/haxe/$env:PLATFORM/haxe_latest.zip -OutFile $DOWNLOADDIR/haxe_bin.zip - name: Setup Haxe shell: pwsh run: | $DOWNLOADDIR="./win$($env:ARCH)Binaries" Expand-Archive $DOWNLOADDIR/*_bin.zip -DestinationPath $DOWNLOADDIR Set-PSDebug -Trace 1 $HAXEPATH = Get-ChildItem $DOWNLOADDIR/haxe_*_* -Directory Write-Host "::add-path::$HAXEPATH" Write-Host "::set-env name=HAXELIB_ROOT::$HAXEPATH\lib" - name: Print Haxe version shell: pwsh run: haxe -version - name: "Make Python 3 be available as python3 in the cmdline" shell: pwsh run: | Set-PSDebug -Trace 1 $pypath = python -c "import sys; print(sys.executable)" $py3path = $pypath.replace("python.exe","python3.exe") cmd /c mklink $py3path $pypath python3 -V - name: Install hererocks if: matrix.target == 'lua' shell: cmd run: | pip install hererocks hererocks lua53 -l5.3 -rlatest call lua53/bin/activate - name: Setup haxelib shell: pwsh run: | mkdir "$env:HAXELIB_ROOT" haxelib setup "$env:HAXELIB_ROOT" - name: Test shell: pwsh run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests windows-test: needs: windows-build runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache ARCH: 32 strategy: fail-fast: false matrix: # TODO jvm: https://github.com/HaxeFoundation/haxe/issues/8601 # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024 target: [macro, js, hl, cpp, java, cs, php, python, neko] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: win${{env.ARCH}}Binaries - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 # - name: Quick test # shell: pwsh # run: | # $DOWNLOADDIR="./win$($env:ARCH)Binaries" # new-item -Name $DOWNLOADDIR -ItemType directory # Invoke-WebRequest https://build.haxe.org/builds/haxe/$env:PLATFORM/haxe_latest.zip -OutFile $DOWNLOADDIR/haxe_bin.zip - name: Setup Haxe shell: pwsh run: | $DOWNLOADDIR="./win$($env:ARCH)Binaries" Expand-Archive $DOWNLOADDIR/*_bin.zip -DestinationPath $DOWNLOADDIR Set-PSDebug -Trace 1 $HAXEPATH = Get-ChildItem $DOWNLOADDIR/haxe_*_* -Directory Write-Host "::add-path::$HAXEPATH" Write-Host "::set-env name=HAXELIB_ROOT::$HAXEPATH\lib" - name: Print Haxe version shell: pwsh run: haxe -version - name: "Make Python 3 be available as python3 in the cmdline" shell: pwsh run: | Set-PSDebug -Trace 1 $pypath = python -c "import sys; print(sys.executable)" $py3path = $pypath.replace("python.exe","python3.exe") cmd /c mklink $py3path $pypath python3 -V - name: Install hererocks if: matrix.target == 'lua' shell: cmd run: | pip install hererocks hererocks lua53 -l5.3 -rlatest call lua53/bin/activate - name: Setup haxelib shell: pwsh run: | mkdir "$env:HAXELIB_ROOT" haxelib setup "$env:HAXELIB_ROOT" - name: Test shell: pwsh run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests linux-test: needs: linux-build runs-on: ubuntu-18.04 env: PLATFORM: linux64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache strategy: fail-fast: false matrix: target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9 include: - target: js # SAUCE: 1 # SAUCE_TUNNEL_ID: 'linux-test' # SAUCE_BUILD: '${{env.GITHUB_RUN_NUMBER}}' # $(Build.BuildNumber) - target: hl APT_PACKAGES: cmake ninja-build libturbojpeg-dev - target: cpp APT_PACKAGES: gcc-multilib g++-multilib - target: lua APT_PACKAGES: ncurses-dev # - target: flash9 # APT_PACKAGES: libglib2.0-0 libfreetype6 xvfb steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: linuxBinaries - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: Setup Haxe run: | # mkdir ./linuxBinaries # curl -sSL https://build.haxe.org/builds/haxe/linux64/haxe_latest.tar.gz -o ./linuxBinaries/haxe_bin.tar.gz sudo apt install -qqy libmbedtls-dev set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Print Haxe version run: haxe -version - name: Setup haxelib run: | set -ex mkdir ~/haxelib haxelib setup ~/haxelib - name: Install apt packages if: matrix.APT_PACKAGES run: | set -ex sudo apt update -qqy sudo apt install -qqy ${{matrix.APT_PACKAGES}} # - name: Flash setup # if: matrix.target == 'flash9' # run: export DISPLAY=:99.0 - name: Test if: success() && !(matrix.SAUCE && matrix.SAUCE_ACCESS_KEY) run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests - name: Test (with SauceLabs) if: matrix.target == 'js' && success() && matrix.SAUCE && matrix.SAUCE_ACCESS_KEY run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests env: SAUCE_ACCESS_KEY: matrix.SAUCE_ACCESS_KEY mac-test: needs: mac-build runs-on: macos-latest env: PLATFORM: mac TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache strategy: fail-fast: false matrix: target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9 include: - target: hl BREW_PACKAGES: ninja steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: macBinaries - name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 - name: Setup Haxe run: | # mkdir ./macBinaries # curl -sSL https://build.haxe.org/builds/haxe/mac/haxe_latest.tar.gz -o ./macBinaries/haxe_bin.tar.gz set -ex tar -xf macBinaries/*_bin.tar.gz -C macBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/macBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/macBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/macBinaries/std /usr/local/share/haxe/std - name: Print Haxe version run: haxe -version - name: Setup haxelib run: | set -ex mkdir ~/haxelib haxelib setup ~/haxelib - name: Install homebrew packages if: matrix.BREW_PACKAGES run: brew install ${{matrix.BREW_PACKAGES}} - name: Test run: | # disable invalid Unicode filenames on APFS echo "" > sys/compile-fs.hxml haxe RunCi.hxml working-directory: ${{github.workspace}}/tests deploy: if: github.event_name != 'pull_request' needs: [linux-test, mac-test, windows-test, windows64-test] runs-on: ubuntu-18.04 steps: # this is only needed for to get `COMMIT_DATE`... # maybe https://github.community/t/expose-commit-timestamp-in-the-github-context-data/16460/3 # would be faster - name: Checkout the repository uses: actions/checkout@main - name: Download build artifacts uses: actions/download-artifact@v2 - name: Install awscli run: | set -ex sudo apt-get update -qqy sudo apt-get install -qqy awscli # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Upload binaries shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} run: | set -ex COMMIT_HASH_SHORT=${GITHUB_SHA:0:7} COMMIT_DATE=`TZ=UTC git show --quiet --date='format-local:%Y-%m-%d' --format="%cd"` FILE_NAME=haxe_${COMMIT_DATE}_${{ steps.extract_branch.outputs.branch }}_${COMMIT_HASH_SHORT} aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/${FILE_NAME}.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/${FILE_NAME}.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/${FILE_NAME}.zip aws s3 cp win64Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows64-choco/ aws s3 cp win32Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows/${FILE_NAME}.zip aws s3 cp win32Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows-installer/${FILE_NAME}.zip aws s3 cp win32Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows-choco/ - name: Update "latest" if: github.ref == 'refs/heads/development' shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} run: | set -ex aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/haxe_latest.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/haxe_latest.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/haxe_latest.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/haxe_latest.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/haxe_latest.zip aws s3 cp win32Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows/haxe_latest.zip aws s3 cp win32Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows-installer/haxe_latest.zip # Chocolatey packages have to be named with version number, # so let's use web redirection to keep the original file name. [[ "$HXBUILDS_S3ADDR" =~ s3://([^/]+)(.*) ]] && HXBUILDS_S3BUCKET="${BASH_REMATCH[1]}" && HXBUILDS_S3PATH="${BASH_REMATCH[2]}" [[ `echo win64Binaries/*.nupkg` =~ win64Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}" aws s3 cp ${HXBUILDS_S3ADDR}/haxe/windows64-choco/${FILE_NAME} ${HXBUILDS_S3ADDR}/haxe/windows64-choco/haxe_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3PATH}/haxe/windows64-choco/${FILE_NAME}" [[ `echo win32Binaries/*.nupkg` =~ win32Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}" aws s3 cp ${HXBUILDS_S3ADDR}/haxe/windows-choco/${FILE_NAME} ${HXBUILDS_S3ADDR}/haxe/windows-choco/haxe_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3PATH}/haxe/windows-choco/${FILE_NAME}" deploy_apidoc: if: github.event_name != 'pull_request' # TODO: also only when `GHP_REMOTE` is present needs: [linux-test, mac-test, windows-test, windows64-test] runs-on: ubuntu-18.04 steps: - name: Download Haxe uses: actions/download-artifact@v2 with: name: linuxBinaries path: linuxBinaries - name: Setup Haxe run: | set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Download xmldoc artifact uses: actions/download-artifact@v2 with: name: xmldoc path: xmldoc - name: Deploy to api.haxe.org env: GHP_EMAIL: haxe-ci@onthewings.net GHP_USERNAME: Haxe CI Bot GHP_REMOTE: ${{ secrets.GHP_REMOTE }} run: | set -ex LOCAL="`pwd`/extra/api.haxe.org" git clone "${GHP_REMOTE}" "${LOCAL}" haxe --cwd "${LOCAL}" --run ImportXml "`pwd`/xmldoc" haxe_4.2.4.orig/.vscode/schemas/define.schema.json0000644000175000017500000000274414146064214021760 0ustar andyandy00000000000000{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "markdownDescription": "OCaml name of the define." }, "define": { "type": "string", "markdownDescription": "Actual name of the define as it's used in `-D` on the CLI and in Haxe code." }, "doc": { "type": "string", "markdownDescription": "Documentation for the define that is shown in `--help-defines`." }, "platforms": { "type": "array", "markdownDescription": "Platforms on which this define has an effect.", "minItems": 1, "items": { "enum": [ "js", "lua", "neko", "flash", "php", "cpp", "cs", "java", "python", "hl", "eval" ] } }, "params": { "type": "array", "markdownDescription": "Parameters this define takes.", "minItems": 1, "items": { "type": "string" } }, "devcomment": { "type": "string", "markdownDescription": "Internal comment that is not exposed." }, "links": { "type": "array", "markdownDescription": "Relevant URLs.", "minItems": 1, "items": { "type": "string", "format": "uri" } }, "reserved": { "type": "boolean", "markdownDescription": "Reserved defines may not be defined from the command line." } }, "required": [ "name", "define", "doc" ] } }haxe_4.2.4.orig/.vscode/schemas/meta.schema.json0000644000175000017500000000353614146064214021454 0ustar andyandy00000000000000{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "markdownDescription": "OCaml name of the meta." }, "metadata": { "type": "string", "markdownDescription": "Actual name of the meta as it's used in Haxe code." }, "doc": { "type": "string", "markdownDescription": "Documentation for the meta that is shown in `--help-metas` and IDE hints." }, "platforms": { "type": "array", "markdownDescription": "Platforms on which this meta has an effect.", "minItems": 1, "items": { "enum": [ "js", "lua", "neko", "flash", "php", "cpp", "cs", "java", "python", "hl", "eval" ] } }, "params": { "type": "array", "markdownDescription": "Parameters this meta takes.", "minItems": 1, "items": { "type": "string" } }, "devcomment": { "type": "string", "markdownDescription": "Internal comment that is not exposed." }, "internal": { "type": "boolean", "markdownDescription": "Whether this define is for internal use only, in which case it is not exposed to the CLI and the `--display` protocol." }, "targets": { "type": "array", "markdownDescription": "On what the meta can be used.", "minItems": 1, "items": { "enum": [ "TClass", "TClassField", "TAbstract", "TAbstractField", "TEnum", "TTypedef", "TExpr", "TTypeParameter", "TAnyField" ] } }, "links": { "type": "array", "markdownDescription": "Relevant URLs.", "minItems": 1, "items": { "type": "string", "format": "uri" } } }, "required": [ "name", "metadata", "doc" ] } }haxe_4.2.4.orig/.vscode/settings.json0000644000175000017500000000103614146064214017475 0ustar andyandy00000000000000{ "files.associations": { "*.mly": "ocaml", "*.ml": "ocaml", "Makefile.*": "makefile" }, "[ocaml]": { "editor.tabSize": 4 }, "files.exclude": { "**/_build": true }, "reason.server.languages": [ "ocaml" ], "haxe.diagnosticsPathFilter": "${workspaceRoot}/std", "npm.autoDetect": "off", "json.schemas": [ { "fileMatch": [ "src-json/define.json" ], "url": "./.vscode/schemas/define.schema.json" }, { "fileMatch": [ "src-json/meta.json" ], "url": "./.vscode/schemas/meta.schema.json" } ] }haxe_4.2.4.orig/.vscode/tasks.json0000644000175000017500000000221014146064214016755 0ustar andyandy00000000000000{ "version": "2.0.0", "tasks": [ { "label": "make: haxe", "type": "shell", "command": "make ADD_REVISION=1 -s -j haxe", "windows": { "command": "make ADD_REVISION=1 -f Makefile.win -s -j haxe" }, "problemMatcher": [], "group": { "kind": "build", "isDefault": true } }, { "label": "make: libs", "type": "shell", "command": "make -s -j libs", "windows": { "command": "make -f Makefile.win -s -j libs" }, "problemMatcher": [] }, { "label": "make: haxelib", "type": "shell", "command": "make -s haxelib", "windows": { "command": "make -f Makefile.win -s haxelib" }, "problemMatcher": ["$haxe", "$haxe-absolute"] }, { "label": "make: all", "type": "shell", "command": "make s -j libs && make ADD_REVISION=1 -s -j haxe && make -s haxelib", "windows": { "command": "make -f Makefile.win -s -j libs && make ADD_REVISION=1 -f Makefile.win -s -j haxe && make -f Makefile.win -s haxelib" }, "problemMatcher": ["$haxe", "$haxe-absolute"] }, { "label": "make: clean", "type": "shell", "command": "make clean", "problemMatcher": [] } ] }haxe_4.2.4.orig/CONTRIBUTING.md0000644000175000017500000001017514146064214015636 0ustar andyandy00000000000000## Things to check before/while filing an issue: - Check if you actually suspect that there's an issue in the Haxe code. If you find yourself writing "How do I..." you may want to consider a different communication channel. Refer to https://haxe.org/community/community-support.html for more information. - Reduce your code to a minimal example (see http://sscce.org/). In particular avoid library dependencies: If you cannot reproduce your issue without using a specific library, it might not be a Haxe issue to begin with. - Check if your problems are already resolved in the Haxe development version (for builds see http://build.haxe.org/). - Most targets produce readable code. If you suspect the generated code to be wrong, try checking the output. Note that you can add `-D dump=pretty` to your compilation parameters and find the code which is passed to the generators in a `dump` subdirectory. ## Is this the right repository to report the issue? This repository is about the Haxe compiler itself and the Haxe standard library. Here's an overview of repositories that are part of the Haxe ecosystem: * The haxelib command line tool or lib.haxe.org: * Something on try.haxe.org: * Something under haxe.org/manual: * Something on api.haxe.org: For content this is probably the right repository. If it's about the representation, try instead. * Something else on haxe.org: ## Submitting a Pull-Request Thank you for your interest in contributing to Haxe! Haxe is a community-driven project and your help is vital and appreciated! When preparing to submit a pull-request, please make your PR as easy as possible for core devs to evaluate and merge. To that end: * In your PR comments, include: * the reason for your proposed changes (What problem are you fixing?) * some possible solutions, and rationale for the one you chose * a summary of the code changes in your PR * any pros and cons to note about the solution you implemented * links to any relevant GitHub issues, PR's, and/or forum discussions * If you've found and fixed a bug, have you also included a corresponding test for it? * Does your code formatting match that of the rest of the project? * If your changes require updates to the documentation, does your PR include those as well? Please also bear the following in mind: * Evaluating PR's takes time and effort. Even taking a look at a PR in order to request more info or clarification is not zero-cost. * Most members of the core team are volunteers too, and at any given time are typically already busy working on other areas of Haxe. * It's no fun providing negative feedback to a PR. The better you can craft and champion your PR, the more likely it is to be speedily evaluated. ## Debugging Hints ### Using a debugger To debug the Haxe compiler, you can use either a system debugger (`gdb`/`lldb`), or [ocamldebug](http://caml.inria.fr/pub/docs/manual-ocaml/debugger.html). `ocamldebug` provides a better debugging experience. To use it, uncomment `(modes byte)` from [src/dune](src/dune) and recompile. ### Using printf To print information about a type, you can add the following before most lines: ```ocaml Printf.printf "%s\n" (s_type_kind t); ``` There are lots of other stringifying functions, search for "Printing" in `src/core/type.ml` and scroll down to find them. ## Other remarks: - Sometimes people try to be particularly helpful by not only including broken parts in their code, but also "similar" code which is working. More often than not this is more distracting than helpful. If you want to highlight something like this, consider adding the working code commented out. - We do not require a classic "What do you see/what do you expect?" form, but in some cases it is hard to figure out where you think the actual problem is otherwise. - We're keeping this page quite short so there's a higher chance that people actually read it. haxe_4.2.4.orig/Makefile0000644000175000017500000002027414146064214015046 0ustar andyandy00000000000000# Haxe compiler Makefile # # - use 'make' to build all # - use 'make haxe' to build only the compiler (not the libraries) # - if you want to build quickly, install 'ocamlopt.opt' and change OCAMLOPT=ocamlopt.opt # # Windows users : # - use 'make -f Makefile.win' to build for Windows # - use 'make MSVC=1 -f Makefile.win' to build for Windows with OCaml/MSVC # .SUFFIXES : .ml .mli .cmo .cmi .cmx .mly INSTALL_DIR=/usr/local INSTALL_BIN_DIR=$(INSTALL_DIR)/bin INSTALL_LIB_DIR=$(INSTALL_DIR)/lib/haxe INSTALL_STD_DIR=$(INSTALL_DIR)/share/haxe/std PACKAGE_OUT_DIR=out INSTALLER_TMP_DIR=installer PACKAGE_SRC_EXTENSION=.tar.gz MAKEFILENAME?=Makefile PLATFORM?=unix DUNE_COMMAND=dune HAXE_OUTPUT=haxe HAXELIB_OUTPUT=haxelib PREBUILD_OUTPUT=prebuild EXTENSION= LFLAGS= STATICLINK?=0 SYSTEM_NAME=Unknown ifeq ($(OS),Windows_NT) SYSTEM_NAME=Windows else UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) SYSTEM_NAME=Linux endif ifeq ($(UNAME_S),Darwin) SYSTEM_NAME=Mac endif endif # Configuration ADD_REVISION?=0 BRANCH=$(shell git rev-parse --abbrev-ref HEAD) COMMIT_SHA=$(shell git rev-parse --short HEAD) COMMIT_DATE=$(shell \ if [ "$$(uname)" = "Darwin" ]; then \ date -u -r $$(git show -s --format=%ct HEAD) +%Y%m%d%H%M%S; \ else \ date -u -d @$$(git show -s --format=%ct HEAD) +%Y%m%d%H%M%S; \ fi \ ) PACKAGE_FILE_NAME=haxe_$(COMMIT_DATE)_$(COMMIT_SHA) HAXE_VERSION=$(shell $(CURDIR)/$(HAXE_OUTPUT) -version 2>&1 | awk '{print $$1;}') HAXE_VERSION_SHORT=$(shell echo "$(HAXE_VERSION)" | grep -oE "^[0-9]+\.[0-9]+\.[0-9]+") ifneq ($(STATICLINK),0) LIB_PARAMS= -cclib '-Wl,-Bstatic -lpcre -lz -lmbedtls -lmbedx509 -lmbedcrypto -Wl,-Bdynamic ' else LIB_PARAMS?= -cclib -lpcre -cclib -lz -cclib -lmbedtls -cclib -lmbedx509 -cclib -lmbedcrypto endif ifeq ($(SYSTEM_NAME),Mac) LIB_PARAMS+= -cclib '-framework Security -framework CoreFoundation' endif all: haxe tools haxe: $(DUNE_COMMAND) build --workspace dune-workspace.dev src-prebuild/prebuild.exe _build/default/src-prebuild/prebuild.exe libparams $(LIB_PARAMS) > lib.sexp _build/default/src-prebuild/prebuild.exe version "$(ADD_REVISION)" "$(BRANCH)" "$(COMMIT_SHA)" > src/compiler/version.ml $(DUNE_COMMAND) build --workspace dune-workspace.dev src/haxe.exe cp -f _build/default/src/haxe.exe ./"$(HAXE_OUTPUT)" plugin: haxe $(DUNE_COMMAND) build --workspace dune-workspace.dev plugins/$(PLUGIN)/$(PLUGIN).cmxs mkdir -p plugins/$(PLUGIN)/cmxs/$(SYSTEM_NAME) cp -f _build/default/plugins/$(PLUGIN)/$(PLUGIN).cmxs plugins/$(PLUGIN)/cmxs/$(SYSTEM_NAME)/plugin.cmxs kill_exe_win: ifdef SYSTEMROOT -@taskkill /F /IM haxe.exe 2>/dev/null endif # Only use if you have only changed gencpp.ml quickcpp: build_src build_pass_4 copy_haxetoolkit CPP_OS := $(shell uname) ifeq ($(CPP_OS),Linux) copy_haxetoolkit: sudo cp haxe /usr/bin/haxe else copy_haxetoolkit: /cygdrive/c/HaxeToolkit/haxe/haxe.exe /cygdrive/c/HaxeToolkit/haxe/haxe.exe:haxe.exe cp $< $@ endif # haxelib should depends on haxe, but we don't want to do that... haxelib: (cd $(CURDIR)/extra/haxelib_src && $(CURDIR)/$(HAXE_OUTPUT) client.hxml && nekotools boot run.n) mv extra/haxelib_src/run$(EXTENSION) $(HAXELIB_OUTPUT) tools: haxelib install: uninstall mkdir -p "$(DESTDIR)$(INSTALL_BIN_DIR)" cp $(HAXE_OUTPUT) $(HAXELIB_OUTPUT) "$(DESTDIR)$(INSTALL_BIN_DIR)" mkdir -p "$(DESTDIR)$(INSTALL_STD_DIR)" cp -r std/* "$(DESTDIR)$(INSTALL_STD_DIR)" uninstall: rm -rf $(DESTDIR)$(INSTALL_BIN_DIR)/$(HAXE_OUTPUT) $(DESTDIR)$(INSTALL_BIN_DIR)/$(HAXELIB_OUTPUT) if [ -d "$(DESTDIR)$(INSTALL_LIB_DIR)/lib" ] && find "$(DESTDIR)$(INSTALL_LIB_DIR)/lib" -mindepth 1 -print -quit | grep -q .; then \ echo "The local haxelib repo at $(DESTDIR)$(INSTALL_LIB_DIR)/lib will not be removed. Remove it manually if you want."; \ find $(DESTDIR)$(INSTALL_LIB_DIR)/ ! -name 'lib' -mindepth 1 -maxdepth 1 -exec rm -rf {} +; \ else \ rm -rf $(DESTDIR)$(INSTALL_LIB_DIR); \ fi rm -rf $(DESTDIR)$(INSTALL_STD_DIR) opam_install: opam install camlp5 ocamlfind dune --yes haxe_deps: opam pin add haxe . --no-action opam install haxe --deps-only --yes # Package package_env: opam_install haxe_deps package_src: mkdir -p $(PACKAGE_OUT_DIR) # use git-archive-all since we have submodules # https://github.com/Kentzo/git-archive-all curl -s https://raw.githubusercontent.com/Kentzo/git-archive-all/1.15/git_archive_all.py -o extra/git_archive_all.py python extra/git_archive_all.py $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_src$(PACKAGE_SRC_EXTENSION) package_unix: mkdir -p $(PACKAGE_OUT_DIR) rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).tar.gz # Copy the package contents to $(PACKAGE_FILE_NAME) mkdir -p $(PACKAGE_FILE_NAME) cp -r $(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std extra/LICENSE.txt extra/CONTRIB.txt extra/CHANGES.txt $(PACKAGE_FILE_NAME) # archive tar -zcf $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.tar.gz $(PACKAGE_FILE_NAME) rm -r $(PACKAGE_FILE_NAME) package_bin: package_$(PLATFORM) xmldoc: cd extra && \ $(CURDIR)/$(HAXELIB_OUTPUT) newrepo && \ $(CURDIR)/$(HAXELIB_OUTPUT) git hxcpp https://github.com/HaxeFoundation/hxcpp && \ $(CURDIR)/$(HAXELIB_OUTPUT) git hxjava https://github.com/HaxeFoundation/hxjava && \ $(CURDIR)/$(HAXELIB_OUTPUT) git hxcs https://github.com/HaxeFoundation/hxcs && \ PATH="$(CURDIR):$(PATH)" $(CURDIR)/$(HAXE_OUTPUT) doc.hxml $(INSTALLER_TMP_DIR): mkdir -p $(INSTALLER_TMP_DIR) $(INSTALLER_TMP_DIR)/neko-osx64.tar.gz: $(INSTALLER_TMP_DIR) wget -nv https://github.com/HaxeFoundation/neko/releases/download/v2-3-0/neko-2.3.0-osx64.tar.gz -O installer/neko-osx64.tar.gz # Installer package_installer_mac: $(INSTALLER_TMP_DIR)/neko-osx64.tar.gz package_unix $(eval OUTFILE := $(shell pwd)/$(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_installer.tar.gz) $(eval PACKFILE := $(shell pwd)/$(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.tar.gz) $(eval VERSION := $(shell $(CURDIR)/$(HAXE_OUTPUT) -version 2>&1)) $(eval NEKOVER := $(shell neko -version 2>&1)) bash -c "rm -rf $(INSTALLER_TMP_DIR)/{resources,pkg,tgz,haxe.tar.gz}" mkdir $(INSTALLER_TMP_DIR)/resources # neko - unpack to change the dir name cd $(INSTALLER_TMP_DIR)/resources && tar -zxvf ../neko-osx64.tar.gz mv $(INSTALLER_TMP_DIR)/resources/neko* $(INSTALLER_TMP_DIR)/resources/neko cd $(INSTALLER_TMP_DIR)/resources && tar -zcvf neko.tar.gz neko # haxe - unpack to change the dir name cd $(INSTALLER_TMP_DIR)/resources && tar -zxvf $(PACKFILE) mv $(INSTALLER_TMP_DIR)/resources/haxe* $(INSTALLER_TMP_DIR)/resources/haxe cd $(INSTALLER_TMP_DIR)/resources && tar -zcvf haxe.tar.gz haxe # scripts cp -rf extra/mac-installer/* $(INSTALLER_TMP_DIR)/resources cd $(INSTALLER_TMP_DIR)/resources && tar -zcvf scripts.tar.gz scripts # installer structure mkdir -p $(INSTALLER_TMP_DIR)/pkg cd $(INSTALLER_TMP_DIR)/pkg && xar -xf ../resources/installer-structure.pkg . mkdir $(INSTALLER_TMP_DIR)/tgz; mv $(INSTALLER_TMP_DIR)/resources/*.tar.gz $(INSTALLER_TMP_DIR)/tgz cd $(INSTALLER_TMP_DIR)/tgz; find . | cpio -o --format odc | gzip -c > ../pkg/files.pkg/Payload cd $(INSTALLER_TMP_DIR)/pkg/files.pkg && bash -c "INSTKB=$$(du -sk ../../tgz | awk '{print $$1;}'); \ du -sk ../../tgz; \ echo $$INSTKB ; \ INSTKBH=`expr $$INSTKB - 4`; \ echo $$INSTKBH ;\ sed -i '' 's/%%INSTKB%%/$$INSTKBH/g' PackageInfo ;\ sed -i '' 's/%%VERSION%%/$(VERSION)/g' PackageInfo ;\ sed -i '' 's/%%VERSTRING%%/$(VERSION)/g' PackageInfo ;\ sed -i '' 's/%%VERLONG%%/$(VERSION)/g' PackageInfo ;\ sed -i '' 's/%%NEKOVER%%/$(NEKOVER)/g' PackageInfo ;\ cd .. ;\ sed -i '' 's/%%VERSION%%/$(VERSION)/g' Distribution ;\ sed -i '' 's/%%VERSTRING%%/$(VERSION)/g' Distribution ;\ sed -i '' 's/%%VERLONG%%/$(VERSION)/g' Distribution ;\ sed -i '' 's/%%NEKOVER%%/$(NEKOVER)/g' Distribution ;\ sed -i '' 's/%%INSTKB%%/$$INSTKBH/g' Distribution" # repackage cd $(INSTALLER_TMP_DIR)/pkg; xar --compression none -cf ../$(PACKAGE_FILE_NAME).pkg * # tar cd $(INSTALLER_TMP_DIR); tar -zcvf $(OUTFILE) $(PACKAGE_FILE_NAME).pkg # Clean clean: clean_haxe clean_tools clean_package clean_haxe: rm -f -r _build $(HAXE_OUTPUT) $(PREBUILD_OUTPUT) clean_tools: rm -f $(HAXE_OUTPUT) $(PREBUILD_OUTPUT) $(HAXELIB_OUTPUT) clean_package: rm -rf $(PACKAGE_OUT_DIR) FORCE: # SUFFIXES .ml.cmx: $(CC_CMD) .ml.cmo: $(CC_CMD) .PHONY: haxe haxelib # our "all:" target doens't work in parallel mode .NOTPARALLEL: haxe_4.2.4.orig/Makefile.win0000644000175000017500000001002014146064214015626 0ustar andyandy00000000000000PLATFORM=win MAKEFILENAME=Makefile.win include Makefile HAXE_OUTPUT=haxe.exe HAXELIB_OUTPUT=haxelib.exe PREBUILD_OUTPUT=prebuild.exe EXTENSION=.exe PACKAGE_SRC_EXTENSION=.zip ARCH?=32 DUNE_COMMAND=dune.exe ifeq ($(ARCH),64) NEKO_ARCH_STR=64 endif kill: -@taskkill /F /IM haxe.exe # allow Ocaml/Mingw as well NATIVE_LIBS += -I "c:/program files/mingw/lib/" # use make WODI=wodi32 -f Makefile.win to build using WODI 32bit ifdef WODI NATIVE_LIBS += -I "/opt/${WODI}/lib" endif # use make MSVC=1 -f Makefile.win to build for OCaml/MSVC ifeq (${MSVC}, 1) NATIVE_LIBS = shell32.lib libs/extc/extc_stubs.obj libs/extc/process_stubs.obj libs/extc/zlib/zlib.lib libs/objsize/c_objsize.obj endif ifeq (${MSVC_OUTPUT}, 1) FILTER=sed 's/File "\([^"]\+\)", line \([0-9]\+\), \(.*\)/\1(\2): \3/' tmp.cmi endif ifeq (${FD_OUTPUT}, 1) FILTER=sed -e '/File/{ N; s/File "\([^"]\+\)", line \([0-9]\+\), characters \([0-9-]\+\):[\r\n]*\(.*\)/\1:\2: characters \3 : \4/ }' -e 's/_build\/src\//src\//' tmp.cmi endif ifdef FILTER CC_CMD=($(COMPILER) $(ALL_CFLAGS) -c $< 2>tmp.cmi && $(FILTER)) || ($(FILTER) && exit 1) endif ifeq ($(STATICLINK),0) LIB_PARAMS = -cclib -lpcre -cclib -lz -cclib -lcrypt32 -cclib -lmbedtls -cclib -lmbedcrypto -cclib -lmbedx509 endif PACKAGE_FILES=$(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std \ "$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep zlib1.dll | sed -e 's/^\s*//')" \ "$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libpcre-1.dll | sed -e 's/^\s*//')" \ "$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libmbedcrypto.dll | sed -e 's/^\s*//')" \ "$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libmbedtls.dll | sed -e 's/^\s*//')" \ "$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libmbedx509.dll | sed -e 's/^\s*//')" echo_package_files: echo $(PACKAGE_FILES) package_win: mkdir -p out rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).zip temp.zip # Copy the package contents to $(PACKAGE_FILE_NAME) # Using poor man's cp (zip then unzip), because cp in cygwin is quite broken mkdir -p $(PACKAGE_FILE_NAME) 7z a -y -tzip -mx0 temp.zip $(PACKAGE_FILES) > log.txt || type log.txt cd extra && 7z a -y -tzip -mx0 ../temp.zip LICENSE.txt CONTRIB.txt CHANGES.txt > log.txt || type log.txt 7z x -y temp.zip -o$(PACKAGE_FILE_NAME) > log.txt || type log.txt rm temp.zip # archive 7z a -r -tzip out/$(PACKAGE_FILE_NAME)_bin.zip $(PACKAGE_FILE_NAME) > log.txt || type log.txt rm -r $(PACKAGE_FILE_NAME) rm log.txt extra/log.txt package_choco: mkdir -p OUTPUT 7z x -y out/$(PACKAGE_FILE_NAME)_bin.zip -oout > log.txt || type log.txt mv out/$(PACKAGE_FILE_NAME) out/choco sed -e 's/@SNAPSHOT_VERSION@/$(HAXE_VERSION_SHORT)-SNAP$(COMMIT_DATE)/g' extra/choco/haxe.nuspec > out/choco/haxe.nuspec cd out/choco && choco pack mv out/choco/haxe.*.nupkg out rm -rf out/choco $(INSTALLER_TMP_DIR)/neko-win.zip: $(INSTALLER_TMP_DIR) wget -nv https://github.com/HaxeFoundation/neko/releases/download/v2-3-0/neko-2.3.0-win$(NEKO_ARCH_STR).zip -O installer/neko-win.zip package_installer_win: $(INSTALLER_TMP_DIR)/neko-win.zip package_win $(eval OUTFILE := $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_installer.zip) rm -rf $(INSTALLER_TMP_DIR)/resources # neko mkdir $(INSTALLER_TMP_DIR)/resources cd $(INSTALLER_TMP_DIR) && 7z x -y neko-win.zip rm $(INSTALLER_TMP_DIR)/neko-win.zip mv $(INSTALLER_TMP_DIR)/neko* $(INSTALLER_TMP_DIR)/resources/neko # haxe 7z x -y $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.zip -o$(INSTALLER_TMP_DIR)/resources mv $(INSTALLER_TMP_DIR)/resources/haxe* $(INSTALLER_TMP_DIR)/resources/haxe # WinSetup.hx cp extra/WinSetup.hx $(INSTALLER_TMP_DIR)/resources/haxe # extra cp extra/*.nsi $(INSTALLER_TMP_DIR) cp extra/*.nsh $(INSTALLER_TMP_DIR) cp -rf extra/images $(INSTALLER_TMP_DIR) # nsis sed -i "s/%%VERSION%%/$(HAXE_VERSION_SHORT)/g" $(INSTALLER_TMP_DIR)/installer.nsi sed -i "s/%%VERSTRING%%/$(HAXE_VERSION)/g" $(INSTALLER_TMP_DIR)/installer.nsi sed -i "s/%%VERLONG%%/$(HAXE_VERSION)/g" $(INSTALLER_TMP_DIR)/installer.nsi cd $(INSTALLER_TMP_DIR) && makensis installer.nsi 7z a -r -tzip $(OUTFILE) $(INSTALLER_TMP_DIR)/*.exe dir $(PACKAGE_OUT_DIR) haxe_4.2.4.orig/README.md0000644000175000017500000001176014146064214014665 0ustar andyandy00000000000000

GitHub Build Status SauceLabs Test Status Gitter Discord

# Haxe is an open source toolkit that allows you to easily build cross-platform tools and applications that target many mainstream platforms. The Haxe toolkit includes: * **The Haxe programming language**, a modern, high-level, strictly-typed programming language * **The Haxe cross-compiler**, a state-of-the-art, lightning-speed compiler for many targets * **The Haxe standard library**, a complete, cross-platform library of common functionality Haxe allows you to compile for the following targets: * JavaScript * C++ * C# * Java * JVM * Lua * PHP 7 * Python 3 * [HashLink](https://hashlink.haxe.org/) * [NekoVM](https://nekovm.org/) * Flash (SWF Bytecode) * And its own [interpreter](https://haxe.org/blog/eval/) You can try Haxe directly from your browser at [try.haxe.org](https://try.haxe.org)! For more information about Haxe, head to the [official Haxe website](https://haxe.org). ## License The Haxe project has several licenses, covering different parts of the projects. * The Haxe compiler is released under the GNU General Public License version 2 or any later version. * The Haxe standard library is released under the MIT license. * The Neko virtual machine is released under the MIT license. Its bundled runtime libraries (ndll) and tools are released under open source licenses as described in https://github.com/HaxeFoundation/neko/blob/master/LICENSE For the complete Haxe licenses, please see https://haxe.org/foundation/open-source.html or [extra/LICENSE.txt](extra/LICENSE.txt). ## Installing Haxe The latest stable release is available at [https://haxe.org/download/](https://haxe.org/download/). Pre-built binaries are available for your platform: * **[Windows installer](https://haxe.org/download/file/latest/haxe-latest-win.exe/)** * **[Windows binaries](https://haxe.org/download/file/latest/haxe-latest-win.zip/)** * **[OSX installer](https://haxe.org/download/file/latest/haxe-latest-osx-installer.pkg/)** * **[OSX binaries](https://haxe.org/download/file/latest/haxe-latest-osx.tar.gz/)** * **[Linux Software Packages](https://haxe.org/download/linux/)** * **[Linux 32-bit binaries](https://haxe.org/download/file/latest/haxe-latest-linux32.tar.gz/)** * **[Linux 64-bit binaries](https://haxe.org/download/file/latest/haxe-latest-linux64.tar.gz/)** Automated development builds are available from [build.haxe.org](http://build.haxe.org). ## Building from source See [extra/BUILDING.md](extra/BUILDING.md). ## Using Haxe For information on using Haxe, consult the [Haxe documentation](https://haxe.org/documentation/): * [Haxe Introduction](https://haxe.org/documentation/introduction/), an introduction to the Haxe toolkit * [The Haxe Manual](https://haxe.org/manual/), the reference manual for the Haxe language * [Haxe Code Cookbook](https://code.haxe.org), code snippets / learning resource * [Haxe API](https://api.haxe.org), documentation for the Haxe standard and native APIs * [Haxelib](https://lib.haxe.org), Haxelib is the package manager for the Haxe Toolkit. ## Community You can get help and talk with fellow Haxers from around the world via: * [Haxe Community Forum](http://community.haxe.org) * [Haxe on Stack Overflow](https://stackoverflow.com/questions/tagged/haxe) * [Haxe Gitter chatroom](https://gitter.im/HaxeFoundation/haxe/) * [Haxe Discord server](https://discordapp.com/invite/0uEuWH3spjck73Lo) * [#haxe on Twitter](https://twitter.com/hashtag/haxe?src=hash) :+1: Get notified of the latest Haxe news, follow us on [Twitter](https://twitter.com/haxelang), [Facebook](https://www.facebook.com/haxe.org) and don't forget to read the [Haxe roundups](https://haxe.io/). ## Version compatibility Haxe | Neko | SWF | Python | HL | PHP | Lua | --------------- | ----- | ----- | ------ | ---- | ---- | --- | 2.* | 1.* | 8-10 | - | - | - | - | 3.0.0 | 2.0.0 | | - | - | 5.1+ | - | 3.2.0 | | 12-14 | 3.2+ | - | | - | 3.3.0 | 2.1.0 | 21 | | - | | 5.1, 5.2, 5.3, LuaJIT 2.0, 2.1 | 3.4.0 | | | | 1.1 | 5.4+ and 7.0+ (with `-D php7`) | | 4.0.0 | 2.3.0 | | | 1.11 | 7.0+ | | ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for more. Thank you! haxe_4.2.4.orig/dune0000644000175000017500000000004414146064214014255 0ustar andyandy00000000000000(data_only_dirs extra lib std tests)haxe_4.2.4.orig/dune-project0000644000175000017500000000012714146064214015723 0ustar andyandy00000000000000(lang dune 1.11) (name haxe) (package (name haxe) ) (package (name haxe_prebuild) )haxe_4.2.4.orig/dune-workspace.dev0000644000175000017500000000004214146064214017024 0ustar andyandy00000000000000(lang dune 1.11) (profile release)haxe_4.2.4.orig/extra/BUILDING.md0000644000175000017500000001002614146064214016242 0ustar andyandy00000000000000# Building Haxe from source ## Obtaining the source The Haxe compiler source files are hosted on GitHub under the [HaxeFoundation account](https://github.com/HaxeFoundation). The [Haxe repository](https://github.com/HaxeFoundation/haxe) has several submodules, so cloning it should be done with the `--recursive` flag like so: ``` git clone --recursive https://github.com/HaxeFoundation/haxe.git ``` Alternatively, source .zip archives or tarballs can be obtained from the [GitHub Haxe release overview](https://github.com/HaxeFoundation/haxe/releases). However, the git submodules are not included, so you will have to manually place the source code of [submodules](https://github.com/HaxeFoundation/haxe/blob/development/.gitmodules) into appropriate sub-folders. ## Setting up OCaml The Haxe compiler is written in OCaml, so you have to set up an OCaml development environment. In addition, we make use of a number of OCaml libraries. We recommend using OPAM, which is an OCaml package manager that can also manage OCaml installations. The Haxe compiler requires OCaml version 4.02 or higher. Since some of the OCaml libraries Haxe depends on were uploaded in the OPAM 2 format, you should use OPAM 2.x instead of OPAM 1.x. To install OPAM on Unix (e.g. Mac, Linux) systems, follow the [instruction given by OPAM](https://opam.ocaml.org/doc/Install.html). On Windows, we recommend using the [Cygwin/MinGW-based OPAM environment provided by fdopen](https://fdopen.github.io/opam-repository-mingw/installation/), choose the 64-bit versions of everything, also make sure to [use the OPAM 2 version](https://github.com/fdopen/opam-repository-mingw/issues/48). In case you messed up the OPAM installation, you can uninstall OPAM and remove `~/.opam`, which contains the OCaml switches (OCaml compilers and libraries), and start over. Also note that since OPAM 2 on Linux will try to use bubblewrap, which uses Linux user namespaces, which might not be available on environments like Docker or Windows Subsystem for Linux (WSL). In case of encountering related errors, use `--disable-sandboxing` during `opam init`. ## Installing dependencies You need to install some native libraries as well as some OCaml libraries. * Native libraries * PCRE * zlib * Neko (for building haxelib) * OCaml libraries * listed in the `opam` file at the repository root To install the native libraries, use the appropriate system package manager. * Mac OS X * Use [Homebrew](https://brew.sh/), `brew install zlib pcre`. * Debian / Ubuntu * `sudo apt install libpcre3-dev zlib1g-dev`. * Windows (Cygwin) * Run the Cygwin [setup-x86_64.exe](https://cygwin.com/install.html) against the Cygwin installation directory. Install `make`, `git`, `zlib-devel`, `libpcre-devel`, `mingw64-x86_64-gcc-core`, `mingw64-x86_64-zlib`, and `mingw64-x86_64-pcre`. You may need to select "Not Installed" in the dropdown list to see the packages. Copy `zlib1.dll` and `libpcre-1.dll` from `path/to/cygwin/usr/x86_64-w64-mingw32/sys-root/mingw/bin` to the checked out Haxe source directory. * Install Neko by either * Download the [Neko binaries](https://nekovm.org/download/), and add the extracted directory to the beginning of PATH. * Install the [Chocolatey Neko package](https://chocolatey.org/packages/neko). To install the OCaml libraries, use OPAM as follows: ```sh # pin the haxe package to the checked out Haxe source directory opam pin add haxe path/to/haxe --kind=path --no-action # install the haxe package dependencies (as listed in the `opam` file) opam install haxe --deps-only ``` ## Compile In the checked out Haxe source directory, ```sh # On Unix make # On Windows (Cygwin) make -f Makefile.win ``` ## Install Generally, you should remove any existing Haxe installation to avoid conflict. You should at least make sure that the `HAXE_STD_PATH` environment variable is not set. To install the freshly built Haxe, * On Unix (e.g. Mac and Linux), ```sh sudo make install ``` * On Windows, add the checked out Haxe source directory to the beginning of PATH. haxe_4.2.4.orig/extra/CHANGES.txt0000644000175000017500000040147114146064214016344 0ustar andyandy000000000000002021-10-22 4.2.4: New features: hl : add clipboard support in hl 1.12 (#10320) General improvements: all : improved error messages upon directory creation failures (#10361) eval : added `%` operator to `eval.numbers.Int64` and `eval.numbers.UInt64` (#10411) Bugfixes: all : fixed errors on final vars modification with `+=`, `*=` etc operations (#10325) all : fixed hanging of MainLoop.add on threaded targets (#10308, #10329) all : fixed compiler crash when resolving overloads with not enough arguments (#10434) all : fixed non-static `@:to` methods on `@:multiType` abstracts (#10145) analyzer : fixed analyzer on overloads (#10405) analyzer : fixed issues with fields initialization expressions (#10405) display : improved code completion in anonymous objects declarations (#10414) js : fixed IntMap for keys greater than 2^31 (#10316) js : workaround to fix sourcemaps on Firefox in Windows (#10217) js : delayed truncation of the output file on `Compiler.setCustomJSGenerator` (#10387) cs/java : fixed rest arguments for cases when only one argument is provided (#10315) php : fixed type of `php.db.PDO.ATTR_DRIVER_NAME` (#10319) eval : fixed signature of `eval.luv.Tcp.noDelay` method lua : fixed `string.length` when `string` has type of a type parameter constrained to `String` (#10343) jvm : fixed `Reflect.compare()` for different number types (#10350) python : fixed exceptions on tracing some native values (#10440) 2021-07-01 4.2.3: General improvements: all : analyzer optimizations macro : support maps in `haxe.macro.Context.makeExpr` (#10259) js : added `-D js-global=globalThis` to customize global object name (#10282) php : added externs for `quoted_printable_decode`, `quoted_printable_encode`, `Attribute`, `NumberFormat`, `IntlCalendar` and other `Intl*` classes Bugfixes: all : fixed compiler crash on some unreachable code blocks (#10261) jvm : fixed `@:native` (#10280) jvm : fixed `--xml` generation (#10279) 2021-05-14 4.2.2: Bugfixes: all : fixed piping stdin/stdout in `--cmd` (#4669, #6726) all : fixed rest args typing for overloaded functions (#10143) all : fixed using `var` fields as static extensions (#10144) all : fixed completion for a type in `expr is Type` (#10167) all : fixed subtypes in `expr is Module.SubType` expressions (#10174) all : fixed typing chains of calls with constrained type params (#10198) all : fixed mixed constraints of anonymous structures and other types (#10162) all : fixed operator overloading for enum abstracts (#10173) hl : fixed debugging of `catch` blocks (#10109) jvm : fixed manifest generation for cases with a lot of jar libraries (#10157) js : fixed extending extern classes for es5 (#10192) js : fixed checking `this` before `super` for es6 (#10193) eval : fixed null pointer exception in `eval.NativeString.fromString(null)` eval : fixed multiple locks of `sys.thread.Mutex` from the same thread (#10249) 2021-02-26 4.2.1: General improvements: threads : changed main thread initialization to make main event loop available during static initialization (#10114) php : added extern for `number_format` function (#10115) python : rewrote `sys.thread.Thread`, `Mutex` and `Lock` as classes instead of abstracts. Bugfixes: all : fixed compiler compatibility with OS X 10.13 (#10110) all : fixed compiler hanging on `switch` for abstracts with implicit casts involving type parameters and constraints (#10082) all : fixed inlining of `haxe.DynamicAccess.keyValueIterator` (#10118) all : fixed rest arguments typing against type parameters (#10124) analyzer : fixed side effect handling for enums (#10032) cpp : fixed handling of `cpp.ConstCharStar` with analyzer enabled (#9733) php : fixed failure with trailing slash in output dir (#6212) hl : fixed call stack of rethrown exceptions (#10109) 2021-02-09 4.2.0: New features: all : implemented "classic" abstract classes and functions (see [haxe-evolution#69](https://github.com/HaxeFoundation/haxe-evolution/pull/69)) (#9716) all : module-level static declarations (#8460) all : implemented rest arguments (variadic functions) for all targets with `haxe.Rest` type (#9961) all : per-thread event loops `sys.thread.Thread.events` (#9868) all : added `@:inheritDoc` meta to inherit documentation for a type or field from another type or field (#9817) all : support method overloading for extern methods on all targets (#9793) all : constructors forwarding for abstracts with `@:forward.new` (#9735) all : added `EIs` constructor to `haxe.macro.Expr` (#9689) all : added variance forwarding with `@:forward.variance` (#9741) all : treat `Any` as `Dynamic` in variance unification (#6649) all : added some common exception types to `haxe.exceptions` package all : support metadata in var declaration syntax (#9618) all : added `StringTools.unsafeCharAt` (#9467) eval : added libuv bindings under `eval.luv` package (#9903) eval : added bindings to native `Int64` and `UInt64` implementations under `eval.integers` package (#9903) cs : UDP socket implementation (#8498) cs : added `cs.Syntax` module (#10051) jvm : added `-D jvm.dynamic-level` to control the amount of dynamic support code being generated. 0 = none, 1 = field read/write optimization (default), 2 = compile-time method closures java,jvm : support `--java-lib ` (#9551) python : threading API implementation (#9754) General improvements: all : `expr is SomeType` doesn't require parentheses anymore (#9672) all : increased priority of @:using extensions (#9681) all : allowed usage of static extensions with super (#10062) all : allow @:noDoc on fields too (#9893) all : made `Map` abstract transitive (#9877) all : support `@:native` on enum constructors (#9806) all : support `@:using` on typedefs (#9749) all : changed multiline errors format to use "..." as a prefix for subsequent lines (#9651) all : improved type inference with constrained monomorphs (#9549) all : print no-argument function types as `()->...` instead of `Void->...` (#8148) all : allow `function` as package name all : improved object inlining (#9599) display : narrow range for hover on parametrized types (#8073) cs : added .NET 5.0 support (#10043) cpp : support native constructors on extern classes (#9516) php: `php.Syntax.customArrayDecl` (#9113) php : added externs for various php functions and classes php : optimized anonymous objects instantiation (#7916) hl : skip compilation if no module has been changed (#9922) lua : use hx-lua-simdjson for Lua json parsing (#9885) jvm : less CPU consuming `sys.thread.Lock` implementation Bugfixes: all : fixed Template.resolve when current context is not an object (#9372) all : `get` and `set` functions of `haxe.io.Float64Array` actually use 64-bit floats now (#9972) all : treat empty blocks `{}` as object declarations in array comprehension (fixes #9971) all : `haxe.format.JsonParser`: preserve Float-typed values when they are written as such in JSON (ie. "5.0" or "0.0") (#9844) all : fixed priority of forwarded static extensions (#9680) all : fixed some inconsistency in variance unification for abstracts (#9743) display : fixed completion with platform-specific files (#9423) cpp : fixed conversion of `cpp.Int64` to/from `haxe.Int64` (#10101) cpp : fixed extending extern classes with `@:nativeGen` classes (#9431) php : fixed generation with subdirectories in `-D php-front=subdir/index.php` (#10037) php : fixed local vars with the same names as super global vars (#9924) eval : allow full range of 32bit integers in `Std.random` (#9974) js : fixed `haxe.CallStack.exceptionStack` (#9968) js : fixed compatibility issue with closure compiler upon unused `catch` vars (#9617) lua : fixed anonymous object printing issue with null fields on tables hl : drop data of terminated threads (#9875) macro : fixed `haxe.macro.Context.storeTypedExpr` for enum constructs (#9828) macro : emit a deprecation warning upon a macro call instead of upon a macro function declaration (#9425) macro : fixed uncatchable error from `haxe.macro.Context.getType` (#9449) jvm : fixed `Type.resolveEnum` for enums in the root package (#9809) jvm : fixed `Type.resolveEnumName` for enums in the root package (#9759) cs : fixed cs.Lib.rethrow (#9738) nullsafety : respect `@:nullSafety(Off)` on var declarations: `var @:nullSafety(Off) v` nullsafety : respect `@:nullSafety(Off)` in closures in constructors (#9643) nullsafety : fixed error "Type not found : haxe.macro._Compiler.NullSafetyMode_Impl_" (#9483) 2020-12-31 4.1.5: General improvements: all : added an argument to `haxe.CallStack.exceptionStack` to return full stack up to the topmost call (#9947) php : compatibility with PHP 8 Bugfixes: all : fixed empty object declarations in array comprehension (#9971) jvm : fixed equality checks for `Null` and `Null` (#9897) hl : fixed crash if a thread finishes without invoking `sendMessage`/`readMessage` (#9920) php : fixed local vars with certain names (_SERVER, _GET etc) overriding super global values (#9924) php : fixed generation with directories in `-D php-front`. For example `-D php-front=sub/index.php` (#10037) macro : added return type hint to haxe.macro.MacroStringTools.formatString (#9928) cs : fixed catching exceptions from static closures (#9957) eval : fixed `Std.random(arg)` for `arg` values of more than 30 bits (#9974) js : fixed `haxe.CallStack.exceptionStack` (#9968) 2020-09-11 4.1.4: General improvements: all : allowed `Any` as type parameter in `catch(e:SomeType)` (#9641) all : improved compilation speed for `try..catch` expressions (#9848) Bugfixes: all : fixed `switch` typing error for arrow functions with `Void` return type (#9813) all : fixed typing of arrow functions with empty blocks as bodies (closes #9843) macro : fixed `haxe.macro.Context.getResources()` (#9838) php : fixed false detection of `catch` vars in anonymous functions as captured from outer scope php : fixed return type of extern definition for `fseek` function cs,java : fixed generation of `@:generic` classes with anonymous functions (#9799) jvm : fixed sending/reading messages with `sys.thread.Threads` for threads created outside of Haxe (#9863) jvm : fixed multiplication of `Null` and `Int` (#9870) flash : fixed loading swc libraries containing `Vector` without a type parameter (#9805) hl : fixed messages being send to wrong threads with `sendMessage`/`readMessage` in `sys.thread.Thread` (#9875) cpp : fixed `cpp.Lib.stringReference()` (#8457) 2020-07-22 4.1.3 General improvements: all : added an error on `return` outside of a function (#9659) php : support @:native("") for extern classes (#6448) python : support @:native("") for extern classes (#6448) Bugfixes: all : fixed compilation server bug caused by removing `inline` from a method (#9690) macro : fixed compiler crash if `@:genericBuild` meta is removed by a macro during building (#9391) jvm : fixed "--java-lib-extern" (#9515) flash : fixed var shadowing issue for variables captured in a closure inside of a loop (#9624) flash : fixed `VerifyError` exception when `Void` end up as an argument type after inlining (#9678) php : fixed runtime error "cannot use temporary expression in write context" for call arguments passed by reference cs : fixed `cs.Lib.rethrow` (#9738) nullsafety: fixed `@:nullSafety(Off)` in closures inside of constructors (#9643) nullsafety: fixed "Type not found NullSafetyMode_Impl_" (#9483) 2020-06-19 4.1.2 Bugfixes: all : added `contains` and `keyValueIterator` methods to haxe.ds.ReadOnlyArray all : fixed super constructor call when extending externs (#7837, #9501) all : fixed compiler crash for "--run" argument without a value (#9513) all : fixed local variable name collision in `try..catch` (#9533) all : fixed memory leak in completion server related to haxe.Exception (#9537) display : fixed completion for out-of-bounds argument in a call (#9435) display : fixed "find references" through interfaces (#9470) display : optimized "find references" (#9504) display : optimized "server/invalidate" requests (#9509) analyzer : fixed compiler crash upon handling code branches with enums with optional arguments (#9591) jvm : added "--java-lib-extern" to use jar files as externs without adding them to the compiled project (#9515) macro : fixed type intersection syntax in macro reification (#9404) eval : fixed exception message when catching compiler-generated `haxe.macro.Error` as `Dynamic` (#9600) lua : fixed lua code generation without `--main` compilation argument (#9489) php : added an overload signature for `session_set_cookie_params` function (#9507) js : fixed name collisions for catch variables to avoid closure compiler errors (#9617) nullsafety : fixed various scenarios of `if..else` branching (#9474) 2020-05-22 4.1.1 New features: jvm : added `--jvm path/to.jar` CLI argument Bugfixes: all : fixed arguments ordering for @:structInit constructors (#9418) all : fixed display/references completion server request for static fields (#9440) all : fixed "Module not found" error reporting during macro execution in display requests (#9449) all : fixed module name completion for target-specific modules like `Mod.js.hx` (#9423) all : fixed completion for packages named "function" (#7697) all : fixed recursive typedefs with optional arguments in `@:overload` functions (#9455) cpp : fixed StringTools.endsWith() for unicode characters (#8980) cpp : fixed broken externs in `cpp` package (#9452) js/cpp : fixed catch var naming collision (#9413) interp : fixed throwing `haxe.macro.Error` outside of a macro context (#9390) lua : fixed lua.PairTools.ipairsMap method php : fixed an edge case in String methods generation (#9464) 2020-05-13: 4.1.0 New features: all : added tail recursion elimination (#8908) all : added unified exception handling (#9124) all : allow `try {} catch(e) {}` as a shortcut for `try {} catch(e:haxe.Exception) {}` (#9269) eval : added SSL support (#9009) jvm : the JVM target is no longer considered experimental General improvements: all : implemented different display support approach (#8962) all : improved display services related to reference finding all : added go-to-implementation support (#9043) all : made various improvements to diagnostics all : support completion for map keys (#9133) all : improved parser robustness for incomplete syntax (#9148) all : disallowed the combination of `@:overload` and inline (#3846) all : improved renaming of local variables (#9304) all : better inlining of for-loops with anonymous iterators (#8848) all : remove redundant final `return` in `Void` functions (#6420) all : remove redundant `continue` in loops (#8952) all : improved various compilation errors reporting all : allowed `(get,default)` property access combination (#6195, #8825) all : allowed ++ and -- on member properties of abstracts (#8930) js : use abstract type name for generating its implementation class (#9006) js : improve haxe.ds.StringMap implementation (#8909) js : improve interface checking and make it more minifier-friendly (#9178) js : generate `let` instead of `var` when compiler with `-D js-es=6` (#9280) js : optimize `.bind` on constructors (#9227) jvm : rewrote function handling to me much faster and more portable (#9208) jvm : generate interfaces for typedefs for improved performance (#9195) jvm : added support for haxe.MainLoop jvm : support `@:jvm.synthetic` and use it to hide some generated fields (#9213) jvm : respect `@:private` and `@:protected` lua : improve error handling behavior when throwing objects/instances lua : optimize `haxe.iterators.StringIterator` php : optimize `Std.isOfType` for String, Bool and Float php : make Haxe Array implement native interfaces Iterator, IteratorAggregate, Countable (#8821, 9377) cs : support `@:assemblyMeta` and `@:assemblyStrict` (#8347) python : added `__contains__` and `__getitem__` implementations to generated python code for `_hx_AnonObject`, so it is subscribable and behaves like a python dict (#9109) Standard Library: all : negative `startIndex` argument of `String.indexOf` and `String.lastIndexOf` is unspecified (#8365) all : changed Array.iterator() to return instances of haxe.iterators.ArrayIterator (#8987) all : added Array.contains (#9179) all : added Array.keyValueIterator (#7422) all : added haxe.Constraints.NotVoid (#8357) all : added Lambda.findIndex() (#9071) all : added Lambda.foldi() (#9054) all : added array access and key-value iteration support to haxe.ds.HashMap (#9056) jvm : added JVM-specific versions of sys.thread.Lock and sys.thread.Thread jvm : added JVM-specific version of haxe.ds.StringMap java/jvm : use native versions of MD-5, SHA-1 and SHA-256 for `haxe.crypto` modules (#9298) macro : added haxe.macro.Context.containsDisplayPosition(pos) (#9077) nullsafety : treat Strict as a single-threaded mode; added StrictThreaded (#8895) Deprecations: all : deprecated `Std.is`; use `Std.isOfType` instead (#2976) all : added a warning for an uninitialized variable usage captured in a closure (#7447) js : deprecated `untyped __js__(code, args)`; use `js.Syntax.code(code, args)` instead php/neko : deprecated neko.Web and php.Web; will be moved to hx4compat library later (#9153) Bugfixes: all : fixed display support for static imports (#9012) all : fixed completion in macro mode picking up the wrong type (#7703) all : fixed wonky analyzer transformation related to locals captured in closures (#9305) all : allow `return;` in abstract constructors (#7809) all : fixed static @:op([]) functions (#9347) all : fixed `@:optional` handling in the inheritance of `@:structInit` classes (#7559) all : support negative numbers as constant type parameters for `@:generic` types (#9149) all : fixed false positive compilation server error with empty methods in inheritance (#9029) all : fixed default values for manually defined @:structInit constructors (#9177, #9258) all : fixed inference of `Void` return type for arrow functions (#9181) all : fixed inconsistencies in wildcard imports resolution (#9189, #9190) all : fix array comprehension for a chain of `if..else if` without final `else` (#9040) all : prohibit @:structInit on interfaces (#9017) macro : fixed handling `TAnonymous` in `haxe.macro.TypeTools.map` (#9147) eval : fixed EReg.matchSub handling with negative length (#9333) eval : fixed extern classes being generated and causing errors in some cases (#9366) eval : fixed StringBuf.addSub unicode handling (#9382) jvm : fixed Void being generated with the wrong casing (#8717) jvm : fixed debugging-related data being generated in the wrong place jvm : fixed switches on string values being too optimistic jvm : fixed problems with Std.parseInt and Std.parseFloat jvm : made sure type parameter types are boxed jvm : fixed dynamic access on `null` yielding `null` (#8452) cpp : fixed native compilation if there is a `hx` package in a project (#8543) cs : fixed `null` to `0` conversion in parametrized functions for `Null` params (#7428) cs : fixed integer division handling (#9232) php : fixed closure creation out of fields with `null` value (#9316) js : fixed interface generation for minification with Google Closure Compiler in advanced mode (#9172) js : fixed a crash at startup in IE8 (#9062) hl : fixed BLOB handling in SQLite (#9048) 2019-12-17: 4.0.5 Bugfixes: java : fix boolean arguments for `Type.createInstance(cls, args)` (#9025) jvm : fix static overloads (#9034) java/cs : fixed `Reflect.makeVarArgs(fn)` for calls of `fn` without arguments (#9037) js : fix multiple appearances of the first object added to `ObjectMap` is passed to `ObjectMap.set(obj, v)` multiple times (#9026) js : automatically wrap compound expressions with parentheses when passed to `js.Syntax.code()` (#9024) windows : fix adding neko to PATH env var running windows installer (#9021) 2019-11-29: 4.0.3 General improvements: hl : profiler API Bugfixes: all : fixed EnumValue handling in constant propagation with analyzer enabled (#8959) all : fixed compiler crash upon Void items in array declarations (#8972) hl : fixed `sys.thread.Lock` implementation for Hashlink 1.11+ (#8699) js/eval/java/jvm/cs/python/lua : fixed `Std.parseInt()` for hexadecimals with leading whitespaces (#8978) java/cs : fixed `Reflect.callMethod(o, method, args)` for `args` not containing optional arguments (#8975) cs : fixed Json.stringify for @:struct-annotated classes (#8979) cs : fixed bitwise shifts for `cs.types.Int64` (#8978) python : fixed invalid generation of some inlined code blocks (#8971) std : fixed an exception from `haxe.zip.Huffman` on reading a zip (#8875) windows : workaround windows installer being detected as a malware by some anti-virus software (#8951) windows : fix PATH env var modification when running windows installer without admin privileges (#8870) all : fixed null-safety checker for field access on a call to inlined function 2019-11-11: 4.0.2 General improvements and optimizations: php : improved performance of `haxe.io.Bytes.get()` (#8938) php : improved performance of serialization/unserialization of `haxe.io.Bytes` (#8943) php : improved performance of enum-related methods in `Type` class of standard library Bugfixes: haxelib : Fixed too strict requirements to haxelib.json data for private libs all : fixed `@:using` static extensions on `Null` (#8928) php : fixed static methods with the same name in parent and child classes (#8944) 2019-11-04: 4.0.1 Bugfixes: haxelib : fixed git dependencies in haxelib.json neko : updated windows & osx installer to install Neko 2.3.0 (#8906) jvm : fixed compilation failure caused by a specific usage of `Array` (#8872) all : fixed compiler crash on loops with `continue` in all branches of the body (#8912) all : fixed erasing typedef in AST on field access to forwarded abstract fields (#8919) 2019-10-26: 4.0.0 General improvements: js : updated externs for `Float32Array` and `Float64Array` (#8864) php : added array access to `php.NativeStructArray` (#8893) Bugfixes: cs : fixed "This expression may be invalid" false warning (#8589) php : fixed iterator fields on maps being removed (#8851) php : fixed `-2147483648` as init value for static vars (#5289) python : fixed modulo by a negative number (#8845) java : fixed backslash escaping on `EReg.replace` (#3430) lua : fixed `EReg.map` for unicode (#8861) hl : fixed sqlite connection on OSX/Linux (#8878) 2019-09-12: 4.0.0-rc.5 General improvements and optimizations: eval: improved performance of regular expressions (#8693) Bugfixes: all: fixed regression, which caused compiler to crash on enum abstracts with explicit casting (#8765) all: fixed regression of macro `@:from` methods on abstracts (#8779) all: fixed switching on `this` (#8781) 2019-09-04: 4.0.0-rc.4 Standard Library: all : added Map.clear (#8681) all : improved Date API (#8508) all : added JSON-RPC protocol types to haxe.display package (#8610) all : added default timeout to HTTP sockets (#8646) macro : added Context.info (#8478) macro : added Context.getMessages and Context.filterMessages (#8471) macro : added function kind to EFunction (#8653) macro : added string literal kind to CString (#8668) flash : added flash.AnyType (#8549) General improvements and optimizations: all : allowed enum constructors without arguments as static inline var (#8187) all : improved handling of default values when inlining (#8397) all : made various improvements to the display API as usual all : detect invalid #tokens in inactive code (#7108) all : allowed function types in @:generic (#3697) all : improved --help-defines and --help-metas all : improved overall file finding (#8202) all : improved server reaction to added and removed files (#8451) all : improved memory handling of the compilation server (8727) all : improved handling of native libraries on the compilation server (#8629) all : support partial completion results (#8642) all : improved support of hovering over inactive conditional compilation blocks all : improved completion support in .platform.hx files all : support hovering conditional compilation identifiers all : improved and unified identifier checks for names, fields and types (#8708) all : improved --times performance (#8733) all : remove some redundant cast expressions (#8725) all : added --server-connect (#8730) lua : improved -D lua-vanilla js : improved HTML externs Bugfixes : all : fixed various position and replace ranges in the display API all : fixed compiler hang related to @:arrayAccess (#5525) all : fixed bug regarding abstract `this` modification in inline methods (#8454) all : fixed `from Dynamic` on abstracts (#8425) all : fixed overeager recursive inline check (#8489) all : fixed the pattern matcher allowing inexhaustive switches in value-places (#8277) all : fixed pattern matcher allowing invalid abstract unification (#8579) all : fixed local variable type information being lost on the compilation server (#8511) all : don't generate return expressions in Void lambda functions (#6503) all : fixed unification of recursive typedefs again (#8523) all : fixed various hangs related to abstracts (#8588) all : fixed various GADT-related problems (#7672) all : fixed macro `@:from` methods allowing any return type (#8463) macro : fixed Sys.programPath assertion failure (#8466) js : fixed typed array APIs (#8422) java : fixed Std.is on non-reference and unrelated types (#5168) java/macro : fixed null-pointer exception in Reflect.getProperty (#4934) java/jvm : fix switch on null string (#4481) jvm : fixed boxed vs. unboxed comparison (#8577) jvm : generate toplevel types to haxe.root like genjava does (#8590) jvm : improved 32bit support (#8601) cs/python : fixed various issues with code generation cs : fixed NativeArray casting (#3949) 2019-06-13: 4.0.0-rc.3 New features: all : added JVM target General improvements and optimizations: all : create temp vars in pattern matcher to avoid duplicate access (#8064) all : support parsing dots in conditional compilation, e.g. `#if target.sys` all : added `@:bypassAccessor` all : improved various aspects of the display API all : properly error on `@:op(a = b)` (#6903) all : made `@:using` actually work all : properly disallowed some modifier combinations related to `final` (#8335) all : support `@:pure(false)` on variable fields (#8338) flash : updated Flash externs to version 32.0 (now using `final`, `enum abstract` and `haxe.extern.Rest`) flash : rework support for native Flash properties (#8241) php : improved performance of various parser implementations (#8083) cs : support .NET core target (#8391) cs : generate native type parameter constraints (#8311, #7863) Standard Library: all : added StringTools.contains (#7608) all : turned sys.thread.Thread into abstracts (#8130) all : introduced `Std.downcast` as replacement for `Std.instance` (#8301) all : introduced `UnicodeString`, deprecated `haxe.Utf8` (#8298) java : added java.NativeString (#8163) cs : added sys.thread implementations (#8166) js : moved various classes to js.lib (#7390) Bugfixes all : fixed issue with `@:generic` type parameters not being bound to Dynamic (#8102) all : fixed various issues related to `@:structInit` all : fixed top-down inference on abstract setters (#7674) all : fixed DCE issue related to closures (#8200) all : fixed and restricted various Unicode-related issues in String literals all : fixed various priority issues regarding loops and iterators all : fixed cast handling in try-catch expressions (#8257) all : fixed `inline new` handling (#8240) all : fixed pattern matcher issue with wildcards in or-patterns (#8296) all : fixed `@:allow(package)` allowing too much (#8306) all : fixed various issues with startIndex handling on String.indexOf and String.lastIndexOf all : fixed infinite recursion related to printing of objects with circular references (#8113) sys : fixed various Unicode issues (#8135) macro : fixed Array.pop handling (#8075) macro : fixed assertion failure when throwing exception (#8039) macro : fixed various uncatchable exceptions being thrown php : error on case-insensitive name clashes (#8219) lua : fixed issue where Process output occasionally is missing some data hl : fixed various String Unicode issues java : fixed null exception in CallStack.exceptionStack (#8322) js : fixed code generation issue related to negative abstract values (#8318) flash : fix various issues, including native `protected` handling and method overloading Removals: all : remove support for `@:fakeEnum` enums all : disallowed `\x` with values > 0x7F (#8141) all : consistently disallowed metadata in lambda function arguments (#7800) all : removed `--gen-hx-classes` (#8237) 2019-03-22: 4.0.0-rc.2 New features: all : added strictness settings for the null-safety checker, using loose checking by default (#7811) js : added ES6 class generation with `-D js-es=6` (#7806) General improvements and optimizations: all : inherit `@:native` for overriden methods (#7844) all : standardized identifiers allowed in markup literals (#7558) all : show typo suggestions when declaring `override` field (#7847) all : improved parser error messages (#7912) all : improved diagnostics of syntax errors (#7940) all : improved positions of `switch` and `case` expressions (#7947) all : allow parsing `#if (a.b)` (#8005) eval : improved performance of various string operations (#7982) eval : fixed many error positions eval : greatly improved debugger interaction (#7839) eval : properly support threads when debugging (#7991) eval : improved handling of capture variables (#8017) js : generate dot-access for "keyword" field names (#7645) js : optimized run-time type checking against interfaces (#7834) js : skip generation of interfaces when no run-time type checking needed (#7843) Standard Library: all : unified various Thread APIs in sys.thread (#7999) all : moved typed arrays from `js.html` to `js.lib` (#7894) all : added `iterator()` to `haxe.DynamicAccess` (#7892) all : added `keyValueIterator()` to `haxe.DynamicAccess` (#7769) eval : completed Thread API Bugfixes: all : fixed argument default value checking for externs (#7752) all : fixed optional status of overloaded arguments with default values (#7794) all : fixed DCE compilation server state issue (#7805) all : fixed compilation server module dependency issue related to macros (#7448) all : fixed call-site inlining on abstracts (#7886) all : fixed Constructible not checking constraints properly (#6714) all : fixed @:structInit not being compatible with `final` fields (#7182) all : fixed capture variables being allowed in `.match` (#7921) all : fixed infinite recursion on `@:generic` field access (#6430) all : fixed `-D no-deprecation-warnings` for typedefs and enums js : fixed bad stack handling on `Map` constraint checks (#7781) js : fixed DCE issues related to haxe.CallStack (#7908) cpp : fixed Socket flags not being preserved (#7989) lua : fixed broken output when compiling through the compilation server (#7851) lua : fixed `StringTools.fastCodeAt` with `-D lua-vanilla` (#7589) lua : fixed `@:expose` for classes inside packages (#7849) 2019-02-01: 4.0.0-rc.1 New features: all : added experimental null-safety feature through `--macro nullSafety("package")` (#7717) General improvements and optimizations: all : improved unification error messages (#7547) all : added `haxe4` define all : do not require semicolon for markup literals (#7438) all : made `@:expose` imply `@:keep` (#7695) all : unified cast, catch and Std.is behavior of null-values (#7532) macro : static variables are now always re-initialized when using the compilation server (#5746) macro : support `@:persistent` to keep macro static values across compilations js : improve js.Promise extern: now `then` callback argument types can be properly inferred (#7644) Bugfixes: all : fixed various pattern matching problems all : fixed various wrong positions when encoding data to macros all : specified String.indexOf with out-of-bounds indices (#7601) all : fixed various problems related to DCE and feature-handling (#7694) all : fixed bad unary operator optimization (#7704) js : fixed syntax problem related to `instanceof` (#7653) flash : fixed var field access on interfaces being uncast (#7727) cpp : fixed various issues related to casts cpp : fixed some leftover unicode issues php : fixed class naming conflicts (#7716) eval : fixed Socket.setTimeout (#7682) eval : fixed int switch bug related to overflows Removals: macro : deprecated Context.registerModuleReuseCall and onMacroContextReused (#5746) 2018-10-13: 4.0.0-preview.5 New features: all : support Unicode strings properly on all targets all : support `for (key => value in e)` syntax for key-value iterators all : added keyValueIterator to Map and its implementations all : support loop-unrolling on `for (i in 0...5)` (#7365) all : added support for write-mode `@:op(a.b)` all : support `inline call()` and `inline new` expressions (#7425) all : support `@:using` on type declarations (#7462) all : support markup literal strings but require them to be macro-processed (#7438) all : allow enum values without arguments as default function argument values (#7439) lua : add -D lua-vanilla, which emits code with reduced functionality but no additional lib dependencies General improvements and optimizations: all : [breaking] reserved `operator` and `overload` as keywords (#7413) all : made `final` on structure fields invariant (#7039) all : [breaking] disallowed static variables that have no type-hint and expression (#6440) all : added display/typeDefinition to display protocol (#7266) all : fixed various display-related problems all : made parser in display mode much more tolerant all : allowed assigning `[]` where `Map` is expected (#7426) all : unified various parts of the String API across all targets php : Optimized haxe.ds.Vector (VectorData is not Array anymore) php : Optimized `Map.copy()` and `Array.copy()` php : Optimized iterators of `Map` and native arrays. php : Support native PHP generators. See `php.Syntax.yield()` and `php.Generator` js : updated HTML externs eval : improved object prototype field handling (#7393) eval : optimized int switches (#7481) eval : improved IntMap and StringMap performance eval : improved performance of instance calls Removals : all : disallowed get_x/set_x property syntax, use get/set instead (#4699) all : disallowed default values on interface variables (#4087) all : disallowed `implements Dynamic` on non-extern classes (#6191) all : warn about expressions in extern non-inline fields (#5898) all : removed `-D use-rtti-doc`, always store documentation instead (#7493) all : disallowed macro-in-macro calls (#7496) js : removed jQuery and swfobject externs (#7494) Bugfixes: all : fix GC compacting too often in server mode all : [breaking] `function () { }(e)` is no longer parsed as a call (#5854) all : fixed various minor inlining issues all : disallowed `return null` from Void-functions (#7198) all : fixed various pattern matching problems all : fixed compiler hang in display mode (#7236) all : fixed the XML printer trimming CDATA content (#7454) all : fixed invalid visibility unification with statics (#7527) php : Escape `$` in field names of anonymous objects (#7230) php : Generate `switch` as `if...else if...else...` to avoid loose comparison (#7257) cs : fixed bad evaluation order in structures (#7531) eval : fixed various problems with the debugger eval : fixed Vector.fromArrayCopy (#7492) eval : fixed bad string conversions on invalid + operations Standard Library: all : [breaking] made Lambda functions return Array instead of List (#7097) all : added haxe.iterators package all : improved StringTools.lpad/rpad/htmlEscape implementation 2018-06-12: 4.0.0-preview.4 New features: all : added JSON-RPC-based display protocol all : allow `enum abstract` syntax instead of `@:enum abstract` (#4282) all : allow `extern` on fields instead of `@:extern` all : support signature completion on incomplete structures (#5767) all : support auto-numbering and auto-stringification in enum abstracts (#7139) all : support `Type1 & Type2` intersection syntax for type parameter constraints and structures (#7127) General improvements and optimizations: all : reworked CLI usage/help output (#6862) all : implemented `for` loop unrolling (#3784) all : metadata can now use `.`, e.g. `@:a.b`. This is represented as a string (#3959) all : [breaking] disallow static extensions through abstract field casts (#5924) all : [breaking] disallow static extensions on implicit `this` (#6036) all : allow true and false expressions as type parameters (#6958) all : improved display support in many areas all : support `override |` completion all : make display/references and display/toplevel actually work sometimes all : allow `var ?x` and `final ?x` parsing in structures (#6947) all : improved overall robustness of the parser in display mode all : allow `@:commutative` on non-static abstract functions (#5599) js : added externs for js.Date (#6855) js : respect `-D source-map` flag to generate source maps in release builds js : enums are now generated as objects instead of arrays (#6350) eval : improved debugger, support conditional breakpoints Removals: all : moved haxe.remoting to hx3compat js : moved js.XMLSocket to hx3compat neko : moved neko.net to hx3compat all : removed support for `T:(A, B)` constraint syntax Bugfixes: all : fixed various issues with diagnostics all : fixed fields with default values for `@:structInit` classes (#5449) all : fixed `Null` inconsistency in if/ternary expressions (#6955) all : fixed visibility check related to private constructors of sibling classes (#6957) all : fixed @:generic naming (#6968) all : fixed handling of type parameters in local functions (#6560) all : fixed resolution order between `untyped` and type parameters (#7113) all : fixed unification behavior in try/catch expressions (#7120) all : fixed field type being lost for Int expressions on Float fields (#7132) all : cleaned up `inline` handling (#7155) display : fixed completion in packages starting with underscore (#5417) php : fixed Reflect.callMethod with classes as first argument (#7106) eval : fixed internal exception surfacing in some context calls (#7007) eval : fixed Type.enumEq (#6710) flash : fixed silently swallowing exceptions in getters/setters when invoked with Reflect methods (#5460, #6871) Standard Library: all : added `resize` to Array (#6869) all : [breaking] removed `return this` from some haxe.Http methods (#6980) 2018-02-23: 4.0.0-preview.3 See full commit history at https://github.com/HaxeFoundation/haxe/compare/4.0.0-preview.2...4.0.0-preview.3, notable changes below: New features: all : added new function type syntax (`(a:Int, b:String)->Void`) (#6645) all : added column to StackItem.FilePos (#6665) all : added `-D warn-var-shadowing` all : added haxe.Log.formatOutput (#6738) js : added js.Syntax class for generating unsupported JavaScript syntax in a type-safe analyzer-friendly way js : added js.Map and js.Set and js.JsIterator extern definitions (ES6) hl : added hl.Format.digest, use it for native Sha1/Md5 General improvements and optimizations: all : made all non-warning/non-error compiler messages output to stdout (#4480) all : make DCE keep constructor if any instance field is kept (#6690) all : make `final` in structures use class notation display : added `this` and `super` to toplevel completion (#6051) php : implemented direct method comparison. No need to use `Reflect.compareMethods()` php : added `php.Syntax.code()` instead of deprecated `untyped __php__()` (#6708) php : added methods to `php.Syntax` for each php operator: `??`, `?:`, `**` etc. (#6708) python : add ssl support for http requests python : improve Sys.print(ln) code generation (#6184) js : generate faster code for `x.iterator()` calls (#6669) js : rework exception handling, added js.Lib.getOriginalException (#6713) js : generate `value instanceof MyClass` instead of `Std.is(value, MyClass)` (#6687) js : use lazy getter for HaxeError.message instead of calling String(val) in the ctor (#6754) Removals: php : removed `php.Syntax.binop()` (#6708) Deprecations: php : deprecated support for `untyped __php__`, `untyped __call__` etc. Use `php.Syntax` instead. Bugfixes: all : delay interface accessor generation properly (#6225, #6672) all : fixed unbound variable error in anonymous functions (#6674) all : fixed abstract `@:to` used when `from` is available in a specific case (#6751) all : sys.Http: fix chunked encoding handling (#6763) all : fix some invalid Json being accepted by haxe.format.JsonParser (#6734) all : fixed haxe.format.JsonPrinter for instances of classes to make it produce consistent result across targets (#6801) all : fixed autogenerated constructor for extending @:structInit classes (#6822, #6078) js : fixed saving setter to `tmp` var before invocation (#6672) lua : fix toString behavior in the case of -0 (#6652) lua : properly bind field functions when passed as arguments (#6722) php : don't fail on generating import aliases for classes with the similar names (#6680) php : fixed `Sys.environment()` to also return variables set by `Sys.putEnv()` php : fixed `sys.net.Socket.bind()` (#6693) php : fixed appending "sqlite:" prefix to the names of files created by `sys.db.Sqlite.open()` (#6692) php : made php.Lib.objectOfAssociativeArray() recursive (#6698) php : fixed php error on parsing expressions like `a == b == c` (#6720) php : fixed multiple file uploads in php.Web.parseMultiPart() (#4173) php : fixed an issue with "Object" used as a class name for PHP 7.2 (it's a new keyword in php) (#6838) eval : don't lose dynamic function inits from parent classes (#6660) cs : fix order-dependent enum type parameter issue (#6016) 2017-10-08: 4.0.0-preview.2 New features: all : added final keyword (#6596) General improvements and optimizations: all : replaced some occurrences of List with Array all : changed haxe.xml.Fast to an abstract all : improved optimization when comparing against `null` all : added support for `case var x` syntax and detect possible typos (#6608) php : changed `--php-prefix`, `--php-front` and `--php-lib` to `-D php-prefix=`, `-D php-front=` and `-D php-lib=` respectively Removals: all : moved haxe.unit to hx3compat all : moved haxe.web.Request to hx3compat php : dropped php5 support; minimum supported php version is 7.0 now Bugfixes: all : fixed issue with various functions not being displayed in macro context (#6000) all : fixed invalid static extension lookup on `super` (#3607) all : fixed typing error when constructing enums with abstracts over functions (#6609) all : fixed bug that skipped checking @:from typing in some cases (#6564) all : fixed Int64 parsing of negative numbers that end in a zero (#5493) all : fixed top-down inference when constructing enums (#6606) eval : fixed bug with equality handling eval : fixed issue with file creation not defaulting to binary eval : fixed invalid override detection (#6583) eval : fixed infinite recursion when printing arrays/vectors cs/java : fixed DCE bug that would lose toString method of thrown objects php/python : fixed some bit operators for Int32 (#5938) php : fixed accessing `static inline var` via reflection (#6630) php : fixed Math.min() and Math.max() for NAN on PHP 7.1.9 and 7.1.10 js : fixed js syntax error for `value.iterator--` (#6637) Standard Library: macro : added have.display.Position and PositionTools.toRange (#6599) all : moved List to haxe.ds (#6610) 2017-09-12: 4.0.0-preview.1 New features: all : reworked macro interpreter all : added support for arrow functions General improvements and optimizations: js : improved generation of `break` inside `switch` inside loops (#4964) cs : improved generation of enum classes (#6119) sys : the `database` parameter of `Mysql.connect` is now optional js : updated jQuery extern (js.jquery.*) for jQuery 1.12.4 / 3.2.1 support. Makefile : default Unix installation location $(INSTALL_DIR) changed from /usr to /usr/local. Makefile : default Unix std location $(INSTALL_STD_DIR) changed from $(INSTALL_LIB_DIR)/std to $(INSTALL_DIR)/share/haxe/std. Removals: all : removed --eval command line argument sys : SPOD (sys.db.Object, sys.db.Manager and friends) was moved into a separate library `record-macros` (https://github.com/HaxeFoundation/record-macros) js : js.JQuery and js.SWFObject were moved into hx3compat library (https://github.com/HaxeFoundation/hx3compat), it's recommended to use more modern js.jquery.JQuery and js.swfobject.SWFObject classes. all : moved haxe.web.Dispatch into hx3compat library (https://github.com/HaxeFoundation/hx3compat). Bugfixes: php7: fix Reflect.field() for strings (#6276) php7: fix `@:enum abstract` generation without `-dce full` (#6175) php7: fix using enum constructor with arguments as a call argument (#6177) php7: fix `null` property access (#6281) php7: fix setting values in a map stored in another map (#6257) php7: fix haxe.io.Input.readAll() with disabled analyzer optimizations (#6387) php/php7: fixed accessing enum constructors on enum type stored to a variable (#6159) php/php7: fix "cannot implement previously implemented interface" (#6208) php: fix invoking functions stored in dynamic static vars (#6158) php: fix field access on `new MyClass()` expressions wrapped in a `cast` (#6294) Standard Library: all : added `EReg.escape` (#5098) all : `BalancedTree implements `haxe.Constraints.IMap` (#6231) 2018-01-31: 3.4.5 General improvements and optimizations: dce : optimized DCE performance (#6181) Bugfixes: dce : don't remove constructor if any instance field is kept (#6062) js : fixed saving setter to `tmp` var before invocation (#6672) php7 : don't fail on generating import aliases for classes with the similar names (#6680) php7 : fixed appending "sqlite:" prefix to the names of files created by `sys.db.Sqlite.open()` (#6692) php7 : made php.Lib.objectOfAssociativeArray() recursive (#6698) php7 : fixed php error on parsing expressions like `a == b == c` (#6720) php/php7 : fixed `sys.net.Socket.bind()` (#6693) 2017-10-08: 3.4.4 Bugfixes: flash : fixed flash target broken when compiled with OCaml 4.05 (#6589) php7 : fixed accessing `static inline var` via reflection (#6630) js : fixed js syntax error for `value.iterator--` (#6637) cpp : fixed evaluation order problem when constructing enums (#6643) 2017-09-10: 3.4.3 Bugfixes: all : fixed DCE issue with interface fields (#6502) cpp : fixed return typing for embedded closures (#6121) php7: fixed `@:enum abstract` generation without `-dce full` (#6175) php7: fixed using enum constructor with arguments as a call argument (#6177) php7: fixed accessing methods on dynamic values (#6211) php7: fixed `null` property access (#6281) php7: fixed setting values in a map stored in another map (#6257) php7: implemented `php.Lib.mail()` php7: implemented `php.Lib.loadLib()` php7: implemented `php.Lib.getClasses()` (#6384) php7: fixed exception on `Reflect.getProperty(o, field)` if requested field does not exist (#6559) php/php7: fixed accessing enum constructors on enum type stored to a variable (#6159) php/php7: fixed "cannot implement previously implemented interface" (#6208) php: fixed invoking functions stored in dynamic static vars (#6158) php: fixed field access on `new MyClass()` expressions wrapped in a `cast` (#6294) macro : fixed bug in addClassPath that overwrites macro class paths with context class paths 2017-03-20: 3.4.2 Bugfixes: cpp : fixed issue with @:native names being prefixed with :: (#6086) cpp : fixed issue with return type handling (#6103) cpp : fixed inaccurate line numbers that threw off debugging php7 : fixed generation of `[][0]` constructs (#6090) 2017-03-17: 3.4.1 New features: php7 : added source maps generation with `-D source_map` flag. General improvements and optimizations: cpp : added cpp.Star and cpp.Struct to help with extern typing lua : cleaned up various parts of the standard library Bugfixes: all : fixed compilation server issue with two identical @:native paths on extern abstracts (#5993) all : fixed invalid inling in a specific case (#6067) all : fixed various display related issues all : fixed inline super() calls missing field initializations (#6097) all : consider UNC paths to be absolute in haxe.io.Path.isAbsolute (#6061) cpp : improved typing of some Function/Callable-related types cpp : fixed problem with line numbers when debugging hl : various fixes and improvements php : fixed FileSystem.stat() for directories on Windows (#6057) php/php7 : fixed invalid result of Web.getPostData() (#6033) php7 : fixed invalid access to length of string in some cases (#6055) php7 : fixed infinite recursion on MysqlConnection.close() (#6056) 2017-01-31: 3.4.0 General improvements and optimizations: all : support completion for static extensions (#5766) all : removed neko dependency for macros, use PCRE instead all : disabled analyzer optimizations by default, re-enable with -D analyzer-optimize php7 : generate native `$v instanceof MyType` instead of `Std.is(v, MyType)` where possible for better performance php7 : added @:phpNoConstructor meta for externs which do not have native php constructors and yet can be constructed php7 : greatly reduced amount of generated tmp vars php7 : `Array` performance improvements hl : made various improvements Bugfixes: all : fixed `using` picking up non-static abstract functions (#5888) all : fixed issue with side-effect detection when optimizing (#5911) all : fixed issue with zlib bindings causing zlib_deflate errors (#5941) php7 : Allow user-defined modules in `php` package (#5921) php7 : Dereference some of `php.Syntax` methods if required (#5923) php : fixed assigning a method of dynamic value to a variable (#5469) php : fixed missing initialization of dynamic methods in classes with empty constructors (#4723) 2016-12-24: 3.4.0-RC2 New features: js : added API documentation to HTML externs (#5868) php : added php7 target, enabled with -D php7 Bugfixes: all : fixed top-down inference infinite recursion issue (#5848) all : fixed regression in Compiler.include (#5847) all : fixed Not_found exception related to try/catch (#5851) all : fixed metadata completion showing up in trace arguments (#5775) all : fixed problem with useless pattern detection (#5873) all : fixed issue with toString handling in trace arguments (#5858) all : fixed inline constructor scoping (#5855) cpp : fixed issue with cpp.Pointer variables being eliminated (#5850) js : added Notification API to HTML externs (#5852) js : fixed several options structures in HTML externs (#5849) php/cs : FileSystem.deleteFile() and FileSystem.deleteDirectory() now throw on non-existent path (#5742) php/lua : fixed field access on `null` (#4988) php : fixed static field access on a `Class` stored to a field (#5383) php : fixed invalid detection of `NativeArray` by `Std.is()` (#5565) php : fixed `stdin()`, `stdout()`, `stderr()` of `Sys` to use predefined constants for corresponding channels (#5733) php : fixed Std.parseInt() on hexstrings for PHP7+ (#5521) php : fixed typed cast in assign operations (#5135) php : fixed exception thrown by `Reflect.fields(o)` when `o` is `Class` (#5608) php : fixed json encoding of empty objects (#5015) php : fixed checking floats for equality (#4260) php : throw if invalid json string supplied to Json.parse() (#4592) php : fixed ssl connections (#4581) php : fixed writing bytes containing zero byte to MySQL & SQLite (#4489) php : fixed call()() cases for PHP5 (#5569) 2016-11-29: 3.4.0-RC1 New features: all : support metadata completion all : support type-hint completion all : added @signature display mode (#4758) all : finalized HashLink (HL) target General improvements and optimizations: all : greatly improved support for display mode in general all : made --times output look much nicer all : remove calls to functions that have no side-effect all : hid private property accessors from completion (#5678) js : updated jQuery extern (js.jquery.*) for jQuery 1.12.4 / 3.1.0 support. js : jQuery extern (js.jquery.*) now includes deprecated fields marked with @:deprecated. js : no longer rewrite `o["s"]` to `o.s` (#5724) cpp : greatly improved ObjC output and integration options lua : greatly improved code output quality Bugfixes: all : fixed various optimization issues all : fixed various issues with side-effect detection all : fixed performance drain in the DCE implementation (#5716) all : fixed issue with assignments when inlining constructors (#5340) all : fixed major inlining issue when using compilation server (#5320) all : fixed pattern matching evaluation order issue (#5274) cpp : fixed various minor code generation issues js : fixed issue regarding iterating over abstracts (#5385) python : fixed evaluation order issue for array writing (#5366) Standard Library: all : added Any type (#5500) all : added haxe.extern.AsVar all : added haxe.macro.CompilationServer (experimental) all : fixed haxe.Template.resolve (#5301) 2016-05-27: 3.3.0-RC1 New features: all : support @:resolve on abstracts (#3753) all : support extern abstracts and extern @:enum abstracts (#4862) all : support completion on { if the expected type is a structure (#3907) all : support (expr is Type) with mandatory parentheses (#2976) all : allowed passing package dot-paths on command line (#4227) all : support import.hx modules that define per-directory import/using directives (#1138) all : support parsing of postfix ! operator (can be used by abstract operator overloading and macros) (#4284) all : support parsing of ||= and &&= operators (can be used by abstract operator overloading and macros) (#4427) all : support @:structInit classes (#4526) all : reworked static analyzer and enabled it by default flash : update flash externs to version 21 hl : added HL target (interpreter and C output) lua: added lua target js : introduced new jQuery extern (js.jquery.*) for jQuery 1.12.4 / 2.2.4 support. (#4377) js : introduced new SWFObject extern (js.swfobject.SWFObject) for SWFObject 2.3.20130521 (#4451) js : added js.Lib.rethrow (#4551) cs/java : added -D fast_cast as an experimental feature to cleanup casts Bugfixes: all : properly disallowed assigning methods to structures with read-accessors (#3975) all : fixed a bug related to abstract + Int/Float and implicit casts (#4122) all : disallowed duplicate type parameter names (#4293) all : made UInt's >>> behave like >> (#2736) all : fixed various type loading issues all : fixed code generation problems with `inline` (#1827) php/as3 : support run-time metadata on interfaces (#2042) php : fixed argument passing to closures (#2587) neko/cpp : fixed various sys.Filesystem issues with Windows drive paths (#3266) as3 : fixed problem with covariant return types (#4222) as3 : fixed rare problem with static initialization order (#3563) python : fixed various reflection problems General improvements and optimizations: all : added support for determining minimal types in Map literals (#4196) all : allowed @:native on abstracts to set the name of the implementation class (#4158) all : allowed creating closures on abstract inline methods (#4165) all : type parameter declarations can now have metadata (#3836) all : optimize Math.ceil/floor on constant arguments (#4223) all : allowed extern classes to have field names being used for both static and instance (#4376) all : added haxe.Constraints.Constructible (#4761) all : rewrote pattern matcher to improve output in many cases (#4940) python : use spaces instead of tabs to indent the output (#4299) cpp : reworked backend to improve overall code output quality and fix various issues swf : added scene-tag to allow creating accessible SWF files Standard Library: all : added Lambda.flatten and Lambda.flatMap (#3553) all : added haxe.Constraints.Constructible (#4761) sys : proper quoting/escaping (can be opt-out) for Sys.command and sys.io.Process (#3603) js : added position parameter to haxe.macro.Compiler.includeFile js : removed -D embed-js (#4074) js : updated HTML externs Macro features and changes: macro : added overloads field to ClassField (#3460) macro : added Context.getLocalImports (#3560) macro : added Context.onAfterTyping (#4714) macro : added Context.resolveType 2015-10-11: 3.2.1 Bugfixes: cs/java : fixed `-dce no` issues cs/java : fixed how KExpr type parameters are generated cs : fixed enum creation by reflection problem cpp : do not rely in reflection to make interfaces work for non-first interface parents cpp : fixed setting of static variables via reflection when class has no member variables cpp : make sure StringMap's h field is kept if we use StringMap js : Avoid the use of `eval`/`Function` to get the top-level defined type/var to not break ContentSecurityPolicy 2015-05-12: 3.2.0 New features: all : added @:noPrivateAccess to re-enable access restrictions within @:privateAccess cpp : some support for @:nativeGen metadata Bugfixes: all : fixed detection of @:generic classes with constructor constraints all : fixed variable initialization check issue in loop condition all : fixed pattern matching on @:enum abstracts via field access (#4084) all : fixed missing implicit casts in Map literals (#4100) all : fixed various minor issues in haxe.xml.Parser all : fixed class path issue when HAXE_STD_PATH is set (#4163) js : fixed DCE issue related to printing enums (#4197) js : fixed various issues with the new Bytes implementation php : fixed EOF handling in FileInput.readByte (#4082) cs/java : fixed Math.fround implementation (#4177) cs/java : fixed some cases of Std.parseInt failing (#4132) cpp : fixed compilation without -main (#4199) General improvements and optimizations: all : --macro keep no longer causes types to be included for compilation php : support interpolation in __php__ code js : added variable number of arguments support in js.html.* classes js : refined new HTML externs Macro features and changes: macro : [breaking] synced FClosure and FInstance with the compiler updates 2015-03-15: 3.2.0-RC1 This release removes support for Flash 8 target New features: all : added --display mode for toplevel completion all : added --display mode for position and usage information all : allowed @:callable on abstracts to forward calls to their underlying type all : allowed pattern matching on getters all : allowed @:native on class fields all : added static analyzer with constant propagation all : added Haxe-based XML implementation python : added python target flash : flash player 12-14 support js : added @:jsRequire and js.Lib.require js : support haxe.CallStack.exceptionStack cs : added @:bridgeProperties cs : added -D erase_generics cs : added -D dll_import to import haxe-generated dlls java/cs : added `sys.db` package java/cs : clean unused files in output folder, unless `-D keep_old_output` is defined java/cs : added `-c-arg` to add C#/Java compiler arguments cpp : inititial implementation of cppia scripting Bugfixes: all : fixed nullability of abstracts over functions all : fixed some equality checks between UInt and Int all : fixed rare issue with abstract casts all : fixed some internal code which relied on unspecified evaluation order all : fixed exhaustiveness checks involving guards all : fixed issue involving recursively constrained type parameters and @:generic all : fixed type inference issue in map literals all : fixed type inference issue when calling abstract method from within the abstract all : fixed several abstract variance issues all : fixed DCE issues with interface properties all : fixed variance issue with function variables and dynamic methods on interfaces all : fixed pattern matching on empty arrays that are typed as Dynamic all : fixed various @:generic issues all : fixed default cases on @:enum abstract being omitted all : fixed various expression positions all : disallowed break/continue in closures in loops all : disallowed inline functions in value places all : fixed parsing of cast followed by parentheses all : fixed resource naming in case of invalid file system characters all : fixed issue with inlined array declarations with field access cpp : fixed issue with the side-effect handler cpp : fixed issue with NativeArray in --no-inline mode php : fixed issue with invalid references for closures in for-loops php : fixed Reflect.compare and string comparison for numeric strings cs/java : fixed various issues with -java-lib and -net-lib. cs/java : added @:libType to skip checking on -java-lib / -net-lib types cs/java : compilation server now works with C#/Java [experimental support] cs : fixed Type.enumIndex / switch on C# native enums cs : fixed reflection on COM types java : fixed sys.net.Socket server implementation spod : various fixes - working now on cpp, java, neko, php and c# cpp : improved boot order, with enums constants first General improvements and optimizations: all : disallowed using `super` in value positions all : check exhaustiveness of explicit Null types all : resolve unqualified identifiers to @:enum abstract constructors all : determine @:generic type parameters from constructor call if possible all : properly disallowed field redefinition in extending interface all : properly disallowed leading zeroes for Int and Float literals all : allowed variance on interface variables all : allowed pattern matching on arrays if they are typed as Dynamic all : allowed pattern matching on fields of parent classes all : -D doc-gen no longer implies -dce no all : allowed matching against null on any enum instance flash/js: optimized haxe.ds.StringMap neko : create output directory if it does not exist js : inline Math methods and fields cs/java : optimized Reflect.fields on dynamic structures cs/java : haxe will now clear output directory of old files (use -D keep-old-output to keep them) cs : optimized field lookup structure cs : optimized casting of parametrized types cs : beautify c# code output cs : added `cs.Flags` to manipulate C# enums that can be also flags xml : improved documentation generation and fixed missing entity escaping cpp : property access via Dynamic variables now requires property to be declared with @:nativeProperty cpp : allow injection of code from relative paths using @:sourceFile and @:cppInclude cpp : stronger typing of native functions via cpp.Function + cpp.Callable cpp : moved 'Class' implementation to hx namespace to improve objective C interaction cpp : added file_extension define to change the output filename extension (eg, ".mm") cpp : added pre-calculated hashes to string constants to allow faster lookups cpp : map implementation allows strongly typed interactions in some cases (avoids boxing) cpp : added native WeakMap implementation cpp : put each resource into own cpp file to allow more data/smaller files Standard Library: all : added typed arrays to haxe.io package all : added haxe.ds.Either all : added haxe.extern.Rest type for representing "rest" arguments in extern method signatures all : added haxe.extern.EitherType abstract type for dealing with externs for dynamic targets all : added haxe.DynamicAccess type for working with dynamic anonymous structures using a Map-like interface all : [breaking] changed haxe.ds.Vector.get to return T instead of Null all : added haxe.macro.Compiler.addGlobalMetadata all : changed haxe.Int64 to be an abstract type instead of a class js : updated HTML externs Macro features and changes: macro : added Context.getLocalTVars macro : added TypedExprTools.iter macro : added Context.getCallArguments macro : changed @:genericBuild macros to prefer ComplexType returns macro : [breaking] extended TAnonymous structures now have AExtend status instead of AClosed macro : added Context.getDefines macro : fixed file_seek from end (position was inversed) macro : added Context.storeTypedExpr macro : allowed type name reification Deprecations: all : deprecated structurally extending classes and interfaces sys : Sys.command shell special chars (&|<>#;*?(){}$) are now properly escaped java/cs : Lib.nativeType is now renamed to Lib.getNativeType 2014-04-13: 3.1.3 Bugfixes: all : fixed handling of abstract variance flash : ensure correct endianess in haxe.io.BytesBuffer cpp : fixed issue involving class paths with spaces php : fixed >>> macro : fixed haxe.macro.Compiler.keep General improvements and optimizations: all : give @:deprecated warnings by default, allow -D no-deprecation-warnings cpp : optimized Vector implementation Standard Library: all : renamed Bytes.readDouble/Float to getDouble/Float to avoid inheritance issues all : deprecated Bytes.readString in favor of getString all : added pretty-printing to haxe.format.JsonPrinter (and haxe.Json) 2014-03-29: 3.1.2 Bugfixes: all : disallowed spaces between >>, >>>, >>= and >>>= all : fix branching issue when switching on Dynamic values with only one case all : added missing abstract cast call when checking for equality all : fixed member fields initializations on parent classes that have no constructor all : fixed toString usage of abstracts which are argument to Std.string flash : avoid rare FP 12 PPAPI JIT crash cpp : fixed bug in side-effect handler which caused incorrect behavior of while loops js : fixed missing print function for enum values with DCE macro : make sure member field initializations are respected General improvements and optimizations: all : cached file exist checks to speed up compilations with a lot of class paths all : improved completion related to super class fields all : allowed iterating on abstract which have get_length and @:arrayAccess fields js : improved Type.allEnums implementation to avoid issues with obfuscation Standard Library: all : added haxe.io.Bytes.readDouble/Float all : added haxe.io.BytesBuffer.addString/Float/Double 2014-03-15: 3.1.1 New features: all : added -D deprecation-warnings all : allowed \u escape sequences in strings cs : implemented haxe.CallStack Bugfixes: all : fixed wrong handling of "" and null in haxe.io.Path.join all : fixed invalid cast-to-self generation on some abstracts all : removed @:to Dynamic from UInt to avoid issues in the Map selection algorithm all : fixed various issues with UInt all : fixed position setter in haxe.io.BytesInput all : fixed various issues with member/static extension macros flash : fixed invalid override involving single-constraint type parameters flash8 : fixed various bugs js : fixed a problem with Std.string(null) being optimized incorrectly js : fixed custom generators cpp : dealt with string literals that are too long for MSVC cs : fixed various issues with -net-lib 2014-03-04: 3.1.0 New features: all : allowed null-patterns in pattern matching all : allowed extractors in pattern matching using => syntax all : allowed extending generic type parameters all : allowed (expr : type) syntax (ECheckType) all : allowed @:enum and @:forward on abstracts all : allowed using abstracts as static extension all : allowed Class.new all : added EnumValue.match all : allow multiple structural extension using { > T1, > T2, fields } all : inline array and structure declarations if possible cs : added -net-lib cs : support for native delegates cs : support for attributes cs : support for events Standard Library: all : support abstract types in haxe.rtti.XmlParser all : added Std.instance all : added length field to BytesBuffer, BytesOutput, BytesInput and StringBuf all : added UInt for all targets all : added Array.indexOf and Array.lastIndexOf all : added haxe.xml.Printer all : added haxe.Int32 as abstract type all : added haxe.format.JsonParser/Printer General improvements and optimizations: all : optimized pattern matching output all : allowed recursive type parameter constraints all : improved support of custom @:coreType abstracts all : evaluate conditional expressions in @:require all : improved inline constructors by detecting more cases where it can be applied js : improved inlining js : always use JSON extern (compile with -D old-browser to disable) js : added -D js-flatten js : added -D js-es5 cpp : improved side-effect detection Bugfixes: all : inlining a parameter which has side effects will not remove it even if not used all : implemented constraints check on enum and enum field type parameters all : fixed memory leak in compilation server and optimized caching in general all : fixed issue with invalid lowercase class name in Windows completion flash : fixed font embedding with UTF8 chars flash : give error if non-nullable basic types are skipped in a call flash : give error if assigned parent class field values would be overwritten by super() Macro features and changes: macro : add Context.onAfterGenerate macro : add Context.typeExpr macro : add Context.getExpectedType macro : add ExprTools.getValue macro : allowed $v{(c:Float|Int|String)} macro : resolve error line number in external files macro : rewrote macros used as static extension macro : exposed typed AST macro : added @:genericBuild macro : [breaking] first argument of ComplexType.TExtend is now Array instead of TypePath macro : improved expression printing 2013-09-25: 3.0.1 all : minor DCE bug fix 2013-05-25: 3.0.0 all : added haxe.ds.BalancedTree all : added haxe.ds.EnumValueMap all : allow enum constructors as keys to Map all : haxe.ds.ObjectMap is now correctly constrained on all targets all : preliminary support of -D display-mode=usage|position|metadata all : improved pattern matcher error messages all : allow inline constructors all : allow abstract member macros (not for @:op, @:arrayAccess, @:from, @:to) all : allow abstract type parameter variance all : do not generate hidden null on if without else macro : made abstract structure available 2013-05-08: 3.0.0-RC2 all : improved abstract support all : renamed HAXE_LIBRARY_PATH to HAXE_STD_PATH all : added inlinable constructors all : renamed haxe.ds.FastCell to GenericCell all : fixed >= operator in #if conditionals all : improved completion support for Unknown results all : allowed [] access for Map all : added haxe.ds.WeakMap (not yet supported on all platforms) all : all trace parameters are now printed by default all : added --help-metas all : improved completion all : improved pattern matching variable capture and GADT support js : cached $bind results (unique closure creation per instance) js : removed --js-modern (now as default) cpp : added socket.setFastSend flash : update player 11.7 api flash : improved @:font, @:sound and @:bitmap support neko/java/cs : improved Array performances when growing with [] java : added -java-lib support java : added sys.net package implementation (alpha) java : complete java std library through hxjava haxelib java/cs : added support for overloaded function declarations java/cs : overload selection algorithm cs : operator overloading is now accessible through Haxe cs : source mapping; can be disabled with -D real_position as3 : fixed rare syntax ambiguity php : removed initialization of some inline fields macro : fixed several issues with 'using' a macro function macro : improved expression printing 2013-02-24: 3.0.0-RC flash : updated player 11.4 api all : allowed named functions as r-value all : fixed using + overload usage all : allow any type constraint for type parameters all : make property type optional (when a initial value is set) all : Std.random(x) when x <= 0 is now always 0 spod : added serialized data with SData all : Dispatcher will now throw DETooManyValues all : speed up neko compilation by using native compiler all : allow @:generic on functions all : allow constructing generic type parameters swf : added support for SWC files in -swf-lib macro : added Context.onTypeNotFound callback for unresolved types js : no JS embed as default (use -D embed-js instead) all : added abstract types (Int/Float/Bool/Void/Class/Enum/EnumValue) all : added --help-defines all : changed DCE with three modes : std(default), no and full all : Haxe3 packages changes (see http://haxe.org/manual/haxe3) all : Removed haxe.Int32, haxe.Firebug, haxe.TimerQueue all : added -D key=value and #if (key >= value) operations all : StringTools.htmlEscape/unescape nows handle "/" and '/' all : using and import must now appear before any type declaration in a file all : no longer create variable fields for pure getter/setter properties (unless @:isVar is used) all : use default get_prop/set_prop instead of custom getter/setter names for properties js : added JQuery.delegateTarget macro : removed EType and CType, added EMeta, modified ESwitch all : allow @metadata expr all : replaced haxe.rtti.Generic interface with @:generic metadata all : no longer infer arrays of mixed types as Array all : all type/import/enum constructor resolution now follows the shadowing principle (latest has priority) all : added EReg.matchSub, renamed EReg.customReplace to map all : no longer allow initialization of extern non-inline variables swf : fixed out of memory errors on very large swf-lib files swf : added -D swf_preloader_frame, swf_gpu, swf_direct_blit swf : added -D swf_script_timeout=seconds, swf_debug_password=password, swf_metadata=file swf : added -swf-lib-extern swf : added @:font support (beta) all : added GADT support in enums all : added pattern matching (beta) all : changed callback(func, args) to func.bind(args) macro : added haxe.macro.ExprTools/ComplexTypeTools/TypeTools macro : changed reification syntax to ${expr}, $a{array}, $p{path}, $v{value} macro : allow macro @:pos(pos-expr) to inject positions for reification all : added array comprehension flash : Vector.length is now Int instead of UInt all : moved haxe.BaseCode, haxe.Md5 and haxe.SHA1 to haxe.crypto package all : disallow Void variables and arguments (still allow S -> T to S -> Void) all : added Array.map/filter all : added spell check suggestions for enum constructors and fields all : added opaque abstract(T) types all : allow operator overloading on opaque abstract types all : renamed IntIter to IntIterator all : added Map all : added haxe.ds with StringMap, IntMap, HashMap, ObjectMap, Vector, GenericStack all : removed Hash, IntHash and haxe.FastList in favor of the types in haxe.ds all : haxe.xml.Parser now handles entities consistently across platforms all : renamed HAXE_LIBRARY_PATH environment variable to HAXE_STD_PATH 2012-07-16: 2.10 java/cs : added two new targets (beta) all : fixed List and Null for first, last, pop js : added js.Lib.debug() flash : fixed Xml.parent() when no parent flash : fixed haxe.io.Bytes.blit when len=0 js/php/flash8 : fixed haxe.Int32.mul overflow on 52 bits js : fixed haxe.Utf8 usage (static 'length' issue) all : does not allow overriding var/prop flash : removed wrapping for Xml nodes, use instead specific compare when comparing two typed nodes js : use new haxe.xml.Parser (faster, not based on Regexp) flash : fixed completion issue with for( x in Vector ) all : optimized Std.int(123) and Std.int(123.45) flash : bugfix for @:bitmap with 24-bits PNG (flash decode wrong colors) as3 : fixed EnumValue becomes Object js : removed js.Lib.isIE/isOpera (not complete, use js.JQuery.browser instead) all : function parameters are nullable if they are declared with '?' all : added support for finding common base types of multiple types (unify_min) for array, switch, if php : do not implement duplicate interfaces haxelib : added git support through haxelib git all : allow derived classes to widen method visibility macro : added haxe.macro.Context.getLocalMethod macro : improved support of "using" macro functions php : optimized Xml implementation php : fixed Reflect.get/setProperty not working on PHP < 5.3 all : support for callback(f, _, x) all : allow private access between classes that have a common base class all : added Output.writeFloat/Double and Input.readFloat/Double all : support for var:{x:Float} = { x = 1 } constant structure subtyping all : allow contravariant function arguments and covariant function returns in overrides macro : support for final Array argument as rest argument macro : use top-down inference on macro calls all : made "using" imply "import" all : made String concat more consistent across platforms (add Std.string wrappers) all : allow direct member variable/property and static property initialization js : greatly reduced amount of generated code by using smarter DCE php : made modulo operations more consistent all : allow local functions to have both type parameters and be inlined all : functions type parameters can be constraint (will be checked at end of compilation) macro : use NekoVM runtime for regexps, process and xml parsing flash : allow @:getter/@:setter in interfaces flash : added support for "arguments" in methods all : not used enums and inline var/methods are now removed by DCE all : allow @:overload to use type parameters and not-absolute type paths all : ensure that Std.string of arrays and enums are now consistent across platforms all : allow to inline functions containing other functions xml : added metadata output to xml generator macro : added macro and macro : reification all : renamed type(e) to $type(e) as3 : support for metadata and resources, and other fixes 2012-04-14: 2.09 all : optimized const == const and const != const (with different const types) all : add Type.allEnums(e) all : big improvements with completion speed and fixed many issues flash9 : fixed -D swfprotected with swc output neko : added ~ implementation js : upgraded jquery version, more api overloads sys : added "in" operator for spod macros, added relation access in expressions macro : added ECheckType macro : added TLazy for not-yet-typed class fields js/php/neko : added haxe.web.Request all : added Std.format js : trace() output fallback on console.log if no id="haxe:trace" all : ensure that Std.is(2.0,Int) returns true on all platforms js : replaced $closure by function.$bind + changes in output format all : allowed @:extern on static methods (no generate + no closure + force inlining) all : added documentation in --display infos + display overloads in completion js : removed --js-namespace, added $hxClasses flash : output traces to native trace() when using -D fdb or -D nativeTrace all : allowed abitrary string fields in anonymous objects all : allowed optional structure fields (for constant structs) all : allowed optional args in functions types (?Int -> Void) all : added Reflect.getProperty/setProperty (except flash8) all : added --wait and --cwd and --connect (parsed files and module caching) all : fixed completion in macros calls arguments all : fixed DCE removing empty but still used interfaces/superclasses all : added haxe.Utf8 (crossplatform) neko : Reflect now uses $fasthash (require neko 1.8.2) all : allow \uXXXX in regexp (although not supported everywhere) js : make difference between values and statements expressions in JSGenApi js : added source mapping with -debug (replace previous stack emulation) flash : added @:file("a.dat") class File extends flash.utils.ByteArray flash : added @:sound("file.wav|mp3") class S extends flash.media.Sound js : added --js-modern for wrapping output in a closure and ES5 strict mode all : null, true and false are now keywords all : neko.io.Path, cpp.io.Path and php.io.Path are now haxe.io.Path neko, cpp, php : added Sys class, sys.io and sys.net packages and "sys" define all : allow to access root package with std prefix (std.Type for example) all : added haxe.EnumFlags sys : io.File.getChar/stdin/stdout/stderr are now in Sys class cpp : Reflect.getField and Reflect.setField no longer call property functions. Use Reflect.getProperty and Refelect.setProperty instead. cpp : Default arguments now use Null for performance increase and interface compatibility cpp : Added metadata options for injecting native cpp code into headers, classes and functions php : added php.Lib.mail (hotfix) fixed bug in completion and disabled profiling on Linux (hotfix) fixed $ssize when doing new String(v) in neko (hotfix) fixed bug with properties in interfaces for Flash & PHP 2011-09-25: 2.08 js : added js.JQuery all : added @:overload js : upgraded js.SWFObject from 1.4.4 inlined to 1.5 embedded js : code generator beautify all : ensure that modifying returned Type.getEnumConstructs array does not affect enum all : allow macro typed parameters (other than Expr) flash : added flash11 apis neko : added support for https to haxe.Http (using hxssl library) all : added haxe.Int64 all : added haxe.Int32 isNeg,isZero,ucompare, fixed overflows for js/flash8/php all : bugfix when optimizing inlined immediate function call all : fixed "using" on macro function all : allowed member macros functions (called as static) neko : allowed serialization of haxe.Int32 (as Int) all : fixed invalid optimization of two constant numbers comparison flash8 : bugfix Std.parseInt with some hex values flash9 : added flash.utils.RegExp all : changed @:build behavior, now takes/returns a var with anonymous fields all : added @:native support for enums neko : changed the result of array-assign expression (was null) flash9 : no longer auto create enums from SWF classes (need explicit "enum" type patch) all : optimized variable tracking/renaming all : optimized macro engine (speed x2) all : added -D macrotimes support flash9 : store resources in bytes tag instead of bytecode all : allow $ prefixed identifiers (for macros usage only) all : allow to access modules subtype statics with pack.Mod.Type.value and fixed identifier resolution order flash9 : added @:bitmap("file") for simple embedding all : added haxe.web.Dispatch js : added js.Storage all : allow this + member variables access in local functions added untyped __this__ support and transition error all : added haxe.macro.MacroType neko : neko.Lib.serialize/unserialize now returns bytes neko : added sys.db package (crossplatform with -D spod_macro support) spod_macro now uses wrappers for Bytes (require neko 1.8.2) php : added --php-prefix for prefixing generated files and class names all : added type_expr_with_type enum support php/js : fixed adding 'null' to StringBuf all : added haxe.macro.Context.defineType 2011-01-30: 2.07 all : fixed completion support with --remap all : added macros, added --interp all : removed 'here' special identifier neko : fixed neko.Web.getParamsString() returning "null" instead of "" flash9 : fixed issue with @:bind flash9 : added some missing errors flash9 : fixed TypedDictionary.exists all : added @:build and @:autoBuild for enums and classes neko : Std.parseFloat now returns NaN with invalid string php: fixed Array.push must return the current length (issue 219) php: fixed EReg.replace (issue 194) php: FileSystem.readDirectory now skips '.' and '..' to be consistent with neko (issue 226) flash9 : add trace text on stage (always over current and subclips) flash9 : delay SWF initialization until it's added on stage and stageWidth > 0 (this can be disabled with -D dontWaitStage) all : added haxe.Timer.measure all : added Lambda.indexOf and Lambda.concat all : no longer allow inline vars as metadata values neko : added getFieldsNames to neko.db.ResultSet (supported in Neko 1.8.2 mysql driver) all : added --macro and haxe.macro.Compiler all : allow macro type patches flash9 : changed --gen-hx-classes implementation now use 'haxe -swf-lib lib.swf --gen-hx-classes' instead flash9 : added @:getter and @:setter all : added @:require flash9 : moved vector utils functions from flash.Lib to flash.Vector flash9 : added support for FP 10.1 and 10.2 flash9 : added @:meta(Meta(k="v")) support all : improved #if support (fixed ! precedence) all : lookup unqualified types in all package hierarchy and not only in current package flash : set default flash version to 10 (-swf9 deprecated, use -swf-version 8 for avm1) php : added --php-lib to allow to rename the destination path of the generated lib all : added --dead-code-elimination, removes unused functions from the output (beta feature could not make in the final release) all : added @:keep to prevent --dead-code-elimination of class/method flash9 : fixed issues with loading a Haxe SWF (boot_XXXX class extends flash.Boot) all : allow to inline override methods (if the superclass method is not inlined already) all : fixed escape sequences in literal regular expressions flash9 : fixed Xml.setNodeValue all : removed -excluded, replaced by --macro excludeFile('filename') all : added --macro exclude('package') and --macro include('package') all : importing a typedef of an enum allow to access its constructors all : removed String.cca (replaced by StringTools.fastCodeAt + StringTools.isEOF) flash9 : fixed use of default values when null is passed for nullable basic types all : fixed issues with inlining and class/function type parameters all : big speedup for compiler internal completion all : added --macro keepClass('classname') flash9 : fixed Xml.nodeValue for comments (does not include ) all : added named local functions (allow self-recursion) all : use left-assoc for (==,!=,>,>=,<,<=)(==,!=,>,>=,<,<=) (&&)(&&) and (||)(||) all : give prefix unary operators higher priority than ?: php : fixed XML parsing cpp : many fixes 2010-08-14: 2.06 neko : change serializer to be able to handle instances of basic classes from other modules js : add Document.createTextNode all : bugfix with inline when modifying var with same name as one of current local flash9 : classes implementing ArrayAccess are now dynamic (including TypedDictionary) all : allow "using" on typedefs as3 : minor fixes in genas3 and --gen-hx-classes as3 : fix with readonly/writeonly properties accesses flash9 : list native getter/setters in Type API class/instance fields all : make haxe.rtti.Generic typing lazy (fix for self-recursion) all : allow haxe.rtti.Generic + inheritance all : added resource size limit to 12MB (ocaml max_string_size is 16MB + b64) flash : changes in swf handling to work with >16MB swfs flash9 : only init dynamic methods if not already defined (in subclass) std : added haxe.SHA1 compiler : added TCast, allow cast optimization on flash9/cpp as3 : fixed Std.__init__ generating 'null' compiler : fixed -no-opt flash : allow several -swf-lib no longer support automatic creation of classes for f8 swfs in f9 mode classes defined in f9 swf are not redefinable in Haxe code (use extern) flash9 : allow direct access and completion with classes defined in -swf-lib's flash9 : remove imported libraries debug infos when not compiled with -debug all : only display errors with --display if no completion matched all : some completion related errors fixed flash9 : added @:bind support all : fixed StringTools.hex with negative numbers flash9 : fixed Type.typeof(1<<28) was TFloat flash9 : use flash.XML parser for Xml class implementation neko : fixed Array.splice (was not setting null at end of array) neko : rewrote Array class using neko.NativeArray all : core classes implementation are now in std/(platform)/_std all : added @:final support all : added haxe.rtti.Meta flash9 : added flash.desktop.Clipboard* classes (added in flash10) as3 : fixed Date.toString issue in flash.Boot (now use .toStringHX instead) this will only work if .toString called explicitely on Date class all : only allow "using" on Dynamic if first parameter is Dynamic php : haxe.Http now supports Https connections when OpenSSL extension is enabled (issue 143) php : fixed enum constructors sequence (issue 142) php : added error message when using 2 fields with different cases in the same class/enum php : fixed field declaration for properties with getter and setter (issue 124) php : fixed comparison issues between strings (issue 132) php : enhanced FileInput.readLine using native fgets function (issue 103) flash9 : renamed flash.Error to flash.errors.Error php : removed eval() everywhere and simplified _hx_lambda php : fixed return type for Std.string() with integers and floats php : fixed php.Lib.rethrow all : added custom Haxe serialization php : aligned php.Web.parseMultipart signature with neko implementation cpp : Added source location and stack dump for errors in debug mode cpp : Remapped more keywords cpp : Added templated fast iterator code for arrays and FastLists cpp : Added option for tracing GC references in debug mode cpp : Switch the native string implementation from wchar_t to utf8 - for regex speed cpp : Added extra "()" to ensure correct order of operations cpp : Fixed various bugs for unusual (and not so unusual) language constructs cpp : Fixed order of enum generation from index cpp : Added __unsafe_get and __unsafe_set to Array as possible optimizations cpp : Default to mult-thread compiling on windows for cl version >= 14 cpp : Seed Math.random cpp : Use strftime for Dates cpp : Fix socket sellect passing _s cpp : Throw error when match count does not match regex cpp : Improve register capture in GC cpp : Fix Dynamic integer compare cpp : Implement makeVarArgs cpp : Fix toString for nulls in Enums and Arrays cpp : Added initial Android support cpp : Move initializers to entry functions in standard ndlls. cpp : Changes some CFFI register funtions to char*, from wchar_t* cpp : Added some initial support for v8 script target cpp : Use non-recursive GC marking to avoid overflow in big lists cpp : Added __hxcpp_obj_id 2010-01-09: 2.05 js : added js.Scroll js : package names are now checked at runtime to avoid clashes with existing libs js : added --js-namespace to create a namespace for types that are defined in the root all : updated xml output and html doc - add inline, override, dynamic functions support all : added error when comparing enum with arguments all : optimize constant equality for enums flash9 : fixed verify error with inline + null type flash9 : bugfix when overriding/implementing an method with an applied type parameter php : fixed issues with classes that implement Dynamic all : ignore #! line at beginning of the hx file haxelib : added tags, added documentation flash8 : don't use b64 encoding for text ressources php : fixed bug in Hash.exists for null values and Reflect.callMethod js/flash9 : throw exception in Xml.parse when unclosed node all : improve return type progagation in inlined expression (fix some VerifyErrors) all : optimize {const} into const all : added structure / Dynamic subtyping all : fixed List.map2 error when inline + optional args flash9 : encode all ISO constant strings into UTF8 at compilation time all : allow hxml with only -cmd statements spod : moved Manager.addQuote to Connection.addValue flash9 : removed .iterator() from Vector (not implementable) all : fixed haxe.rtti.Generic on interfaces php : fixed issue with Reflect.callMethod php : fixed issue with PHP reserved word used in callbacks all : bugfix with non-constant enums in switches flash9 : fix for interfaces (use namespace) all : "using" now works for identifiers in member methods flash9 : bugfix with switch on some big integers all : bugfix when optimizing (function(x) return x)(x) neko : improved speed of Xml.toString() all : added -D dump (for debugging purposes) neko : added neko.Web.isTora php : added php.db.PDO (php.db.Sqlite is now deprecated) php : fixed bug in Type.getClassFields() that reported duplicated entries php : fixed errror in XML error reporting all : allow sub-types declarations everywhere (pack.Type.Sub) all : added completion for sub-types declarations all : improved completion with lambda function as3 : several generation fixes all : bugfix haxe.rtti.Generic on private class php/js/cpp : sanitize binary expressions to prevent inlining errors spod : remove object from cache when deleted 2009-07-26: 2.04 flash9 : fixed get_full_path error with -D fdb js : fixed Array.remove on IE flash8 : removed extra empty AS3 tag (causing some issue with F8 loadMovie) improved speed of Bytes unserializing (no need for BytesBuffer) flash9 : bugfix, Null was generating dynamic code flash9 : added error message in flash.Vector if used without flash 10 flash9 : fixed some "never" property access issues all : added "never" property access support for all platforms js : small syntax fix with value-blocks js : fixed Type.enumEq with null values js/flash8 : use &0xFF in haxe.io.Bytes.set flash9 : fixed switch on Null verify error flash9 : fixes related to UInt type + error when using Int/UInt comparison as3 : improved Vector support, inline flash.Lib.as as3 : bugfix with skip_constructor as3 : added Enum.__constructs__ (allow Type.getEnumConstructs) as3 : make all constructor parameters optional (allow Type.createEmptyInstance) as3 : bugfix with property access inside setter (stack overflow) all : Enum is now Enum all : added Type.createEnumIndex all : forbid same name for static+instance field (not supported on several platforms) all : renamed haxe.Http.request to "requestUrl" all : renamed neko.zip.Compress/Uncompress.run to "execute" spod : fix very rare issue with relations and transactions compiler : added TClosure - optimize closure creation and ease code generation cpp : added CPP platform all : added 'using' syntax neko : added 'domains' optional param to ThreadRemotingServer to answer policy-file-request php : fixed php.db.Mysql so that getResult is consistent with Neko behavior php : fixed __toString for anonymouse objects php : fixed bug in overridden dynamic functions php : fixed round to be consistent with other platforms php : fixed bug concatenating two dynamic variables php : php.Lib.rethrow now works as expected flash9 : fixed bug with SWC output and recursive types flash8 : fixed inversed arguments in __new__ neko : added neko.net.Socket.setFastSend php: fixed String.charCodeAt php: minor optimization (removed foreach from std code) php: implemented haxe.Stack php: changed exception handler to use Haxe call stack php: changed special vars to use the '\xBB' prefix instead of __ php: fixed use of reserved keywords for var names php: List iterator is now class based (faster) php: fixed behavior of class variables having assigned functions php: fixed php.db.Manager (was uncorrectly removing superclass fields) php: added support for native Iterator and IteratorAggregate interfaces all : added --display classes and --display keywords all : fixed issue with optional parameters in inline functions all : allow implementing interfaces with inline methods all : enable inlining for getter/setter/iterator/resolve/using 2009-03-22: 2.03 optimized Type.enumEq : use index instead of tag comparison for neko/flash9/php bugfix for flash.display.BitmapDataChannel and GraphicsPathCommand (allow inline static) resolve environment variable in -cmd commands added flash.Vector.indexOf and lastIndexOf fixed bug in interfaces that define the method toString (Haxe/PHP) fixed bug in haxe.io.BytesInput.readBytes in Flash9 (was throwing Eof if full buffer can't be read) fixed implements/extends special classes when they are imported StringBuf now uses an array for JS implementation (around same on FF, faster on IE) fixed assignment of field length in anonym objects (Haxe/PHP) fixed addEventListener typing for flash9 fixed __vector__ generation for AS3 target fix with inline functions : position is now the inserted position and not the original one (better error reporting) added SWC output support fixed issues with unset of values in for loops and executing blocks that return functions (Haxe/PHP) "throw" type is now Unknown instead of Dynamic (prevent type-hole in "if A else if B else throw") added __foreach__ for flash9/as3 fixed f9 verify error with different kind of functions moved eof() from neko.io.FileOutput to FileInput added haxe.rtti.HtmlEditor added neko.db.Manager.setLockMode genAS3 : fixed Error classes issues genAS3 : fixed default basic type value in interfaces flash9 : fixed UInt default parameter verify error flash9 : fixed issue with flash.* string enums verify error compiler : allowed \r line separators for HXML files flash9 : fixed verify error with loop variable beeing a specific class compiler : prevent truncating float dynamic values to int when using numerical operations neko.db.Manager fix : synchronize fields after locking an unlocked cached object compiler : fixed issue with cascading inline+haxe.rtti.Generic optimizer : reduce constant int/float/bool expressions and immediate function calls flash9/as3/php : don't add Boot.skip_constructor test if no side effects in constructor compiler : added --no-opt to disable expr reduction compiler : separated basic and advanced commandline options compiler : fixed printing of sub-function types genHX : fixed generation of classes that extends another class (shouldn't be turned into enums) speedup Array.remove on flash9/js 2008-11-23: 2.02 Std.is(MyInterface, Class) now returns true (Haxe/PHP) php arrays are wrapped into _hx_array instances, fixes issues with references (array cast, access out of bounds ...) removed untested php classes (php.DBase, php.IniHash) added -D use_rtti_doc flash.Lib.getTimer() now returns Int and is inlined fixed php.FileSystem.stat added memory related functions to php.Sys added error when trying to extend Array, String, Date and Xml fixed handling of implements ArrayAccess fixed some minor things in flash10 api switch/for/while/do/try/if are no longer using parse_next (parenthesises requ. instead) fixed Type.typeof and Std.is in case of too much large integers for Flash6-8/JS haxe.xml.Check : treat comments the same as PCDATA spaces haxe.io.BytesData now uses strings instead of arrays for PHP compiler : optimized line calculus from ast position lexer : allow identifiers starting with _[0-9] fixed access to flash.Vector methods : use AS3 namespace (faster) bugfix in inline functions : modifying a parameter can't modify a real local var anymore bugfix in inline functions : handle class type parameters and method type parameters fixed issue with Int default value for Float parameter flash9 : bugfix when using the retval after setting a closure variable added flash.Memory API for flash10 alchemy opcodes access changed #if as3gen to #if as3 when generating as3 code fixed as3 flash.Vector generation fixed haxe.io.BytesOutput for flash9 : set default to little-endian some flash9 fixes related to extern enums updated flash.text.engine package with haxe enums flash9 : use target file path for Boot unique ID instead of random number as3 : fixed bug when anonymous field was a reserved identifier flash9 : added flash.Lib.vectorOfArray and vectorConvert for flash10 added -D check-js-packages to allow several haxe-generated js files in same page 2008-10-04: 2.01 fixed php.Sys added neko.NativeString and neko.NativeArray fixed php.Boot.__string_rec() when invoked from toString fixed null references in class constructors for array arguments fixed Type.enumParameters() and Type.typeOf() for PHP fixed SPOD/MySql for PHP fixed php.net.Socket.setTimeout(), php.io.Process fixed php.Web.setCookie() for expire time fixed php rethrow in catches and added the possibility to catch native exceptions added runttime check for php.io.Socket.shutdown (uses fclose in php 5.1.x) allowed optional Context in remoting connections fixed extern classes for flash < 8 fixed inherited protected/private properties in as3 SWF library fixed haxe.io float/double in Neko (when bigEndian was null) added __FSCommand2__ support optimized haxe.Unserializer (use faster buffer access) use "Dynamic" instead of Dynamic->Void for flash9 IEventDispatcher always use full classes paths for genAS3 prevent different get/set property accesses when implementing an interface fixed assign of dynamicfunction references in PHP Haxe/PHP now generates code for extern classes __init__ added strings literal support in haxe.Template fixed Process arguments and exitCode() in Haxe/PHP fixed hierarchy problem for classes with the name from different packages Haxe/PHP php.db.Mysql now throws an exception when tries to connect to an unexistant DB fixed blocks in if statements for Haxe/PHP added php check on the full hierarchy for colliding names added support for "g" modifier in EReg for PHP PHP now generates __toString for classes that have toString defined implemented php.Lib.getClasses() fixed duplicate fields in Type.getInstanceFields on subclass Enum is no longer defined inside Type but is standalone class fixed Date.getDay on Neko/Windows (use %w instead of %u) fixed memory leak with PHP closures fixed wrong scope in PHP closures fixed Array.reverse() in PHP fixed Reflect.compareMethods in Neko (require Neko 1.8.0) fixed flash7-8 register usage for __init__ and static variables initialization moved StringTools.baseEncode/Decode to haxe.BaseCode fixed binary resources for Flash, JS and PHP outputs fixed compiler bug with inline + optional arguments fixed Type.createInstance and createEmptyInstance with Array for flash6-8 2008-07-28: 2.0 fixed current package bug in inherited constructor type delayed type-parameter constraints check (allow mutual rec extends for SPOD) improved unclosed macro error reporting Haxe/PHP integration renamed NekoSocketConnection to SyncSocketConnection (php support) fixes in genAs3 fix for flash9 : always coerce call return type set all private+protected names from SWF lib to public (allow override+reflect) flash9 : use findprop instead of findpropstrict for 'this' access (allow dynamic) don't allow nullness changes in overrided/implemented prevent typing hole with overridden polymorphic methods added neko.vm.Mutex and neko.vm.Deque (included in neko 1.7.1) added package remapping using --remap 2008-07-17: 2.0-RC1 genneko : remove big array error (fixed in neko 1.7.1) fixed neko.net.ThreadRemotingServer.onXML genswf9 : fixed verify error with Null (was using dynamic access) small patch for jsfl support added .cca for faster string operations on Flash9/Flash/JS bugfix with inlined local variables upgraded flash9 api to flex3/player 9.0.115 override is now mandatory, no more --override dynamic is now a keyword f9dynamic is now dynamic and is mandatory on all platforms public/private/dynamic are inherited by default when overriding a method removed Reflect.empty() : use {} instead changed #else by #elseif, added #else flash9 : optimized Hash,IntHash,StringBuf (use typed value) Reflect.field/setField/callMethod , Type.enumIndex and StringBuf methods are now inlined optimized haxe.Md5 : don't use statics allow up to 8 parameters in Reflect.createInstance flash9 : some minor optimizations in haxe.Serializer added haxe.io package (removed things from neko.io) __resolve becomes resolve (and should be documented) added haxe.Int32 removed neko.Int32 removed neko.io.Input/Output/Eof/Error/Logger/Multiple/StringInput/StringOutput removed neko.net.RemotingServer changed neko apis to use haxe.io and Bytes instead of String buffers fixed big bug in js/flash8 debug stack handling complete rewrite of haxe.remoting package haxe.io.Bytes serialization support (replace deprecated string support) removed === and !== removed Std.bool fixed : Reflect.field(null) in flash9 doesn't throw an error anymore removed Type.toClass and Type.toEnum Dynamic type is now a class and not an enum moved reflection support for core types from Boot to Std fixed Type.getClassName/getEnumName/resolve for core flash9 types renamed haxe.rtti.Type to haxe.rtti.CType (with changes in prefix) added haxe.TimerQueue, added haxe.Timer.delay, remove haxe.Timer.delayed flash9 : bugfix, generated interfaces were empty fixed bug while writing block-vars in flash/js added parameters default value (constants) removed Std.resource, Std.ord, Std.chr added haxe.Resource, allow binary data in resources added Type.createEnum check that local variables get correctly initialized before usage haxe.Stack support for flash9 2008-04-05: 1.19 fixed flash9 Array.toString fixed inline return bug added haxe.rtti.Generic behavior added haxe.FastList bugfix to prevent recursive anonymous fixed some incorrectly reported "recursive inline" errors fixes in genas3 + genswf9 for Dynamic/* in methods {} is now an empty object and not an empty block fixed some verify errors left in flash9 fixed private/protected differences in gen-hx-classes genswf9 : allowed to store a Class in a typed register fixed switch-on-bool (don't use matching) genswf9 : optimized switch on ints some renames in haxe.rtti.Type added flash.utils.TypedDictionary for F9 genswf9 : fixe debug filename with inline code fixed completion for packages starting with 'a' or 'z' added flash9.Lib.as prevent double Movieclip class declaration when linking flash9 lib allow numerical operations on type parameters constraint by Float genswf9 : fixed dynamic inheritance 2008-02-23: 1.18 some optimization and bugfix for as3 codegen bugfix : allow bitmaps and fonts classes for F9 library bugfix : neko.Web.setCookie bugfix : as3 switches in -swf-lib, and enable to "repair" corrupted as3 bytecode fixed --i return value in flash9 fixed some transforms in flash9 added js.Selection simplified js.Dom (more events) added haxe.xml.Fast.innerHTML added Reflect.compare fixed "".split() in Neko (now returns [""] instead of []) bugfix for swf-lib f9 classes ordering added EReg.customReplace added neko.Lib.lazyLoad and improved neko.net.Poll for Neko 1.6.1 prevented static fields in interfaces added neko.Sys.cpuTime() fix for protected as3 classes added support for flash9 XML (in flash.xml package) added neko.vm.Tls for Neko 1.6.1 added --no-inline renamed neko.zip.File to neko.zip.Reader added neko.zip.Writer and neko.zip.CRC32 fixed multilevel Transform.block_vars added js.SWFObject fixes for if/switch with null or Null on Flash9 2008-01-13: 1.17 fixed Int32.compare, added Int32.read and Int32.write fixed type of unitialized registers in flash9 fixed Sqlite transactions (commit and rollback now restart a transaction) several flash9 optimizations flash9 debug support (with -D fdb) set align to TopLeft if not defined for flash9 added neko.vm.Gc fixed Null should not be a value bugfix in serialization format with USE_ENUM_INDEXES added apis in DateTools for time manipulation bugfix in flash9 : strictly typed local vars used in local functions always force swf version and sandbox redefinition added as3hl layer merge as3 classes use flash9 fast switch for enums always use match for enums (no switch even if constant) fixed DateTools.format %I and %l in Flash/JS securized Hash for JS and Flash compiletime F9 class generation for F8 swflib optimized for loops (Array and IntIter) added #line support more f9 Null support for "if" and array declarations more neko.Web.setCookie parameters added "inline" for methods and static vars fixed % type in flash9 2007-10-31: 1.16 use _sans font for default flash traces (better Linux support) fixed haxe.remoting.Connection compilation for Flash<8 added fix to prevent 64K identifiers limit on Flash<9 ensure order of anonymous fields initialization fixed haxe.remoting.Connection.urlConnect in JS use amortized O(1) for Neko Array implementation ndlls libraries should now use .neko() instead of __a allowed 'u' utf8 for regexp (needs Neko 1.6.1 regexp.ndll on windows) onclick and onsubmit JS events returns Bool fixed inherited constructor of extern class was always private fixed Ereg.split without 'g' flag on JS/Flash9 fixed haxe.Stack in JS without -debug added support for -D no-swf-compress fixed ByteArray.readObject fixed implements Dynamic in Flash9 removed neko.io.FileInput.eof, fixed neko.io.Input.readLine fixed haxe.Template for Flash9 added neko.Sys.command optional array of arguments removed haxe.Proxy added flash.XMLRequest fixed Type.enumParameters for Neko guaranteed order of Type.getEnumConstructs same as code used index-based dispatch for enums added Type.enumIndex fixed enum.toString for Flash and JS support for -Dnetwork-sandbox trim -cp and -resource various genas3 fixes 2007-08-29: 1.15 fixed bug with Enum.construct when Enum have type parameters change with "untyped" : arguments types are checked (because of opt select) haxedoc : fixed type parameters display fix for JS and Flash9 XML parser : allow newlines in attributes disable Flash9 resources with AS3Gen error on extra anonymous fields error on too much big neko array declaration (neko 1.6 max_stack limit) fixed Flash9 statics slots (FP 9,0,60 compatibility) fixed Flash9 Type.getClassName optional enums arguments on Flash9 are now automatically Null forbid usage of type parameters in static functions fixed Std.int with negative numbers fixed some F9 issues with Haxe-specific Array, Date and Math methods used AS3 namespace for F9 Array and String instance methods fixed F9 with uninitialized integer registers fixed F9 + operator with Dynamic/Null operands added Enum subtyping fix with remoting threadserver and exceptions fixed Flash9 dynamic runtime type field access fixed very tricky typing bug with constructors inheritance fixed some documentation related parser bug fixed stack overflow with static setter fixed package completion bug when -cp points to an not existing dir fix duplicate sandboxes tags with -swf __resolve in Haxe Remoting is now public 2007-07-25: 1.14 fixed no error when invalid "catch" expression remove variance fixed prototype bug in neko when "Main" class is defined fixed flash9 xml iterator methods bugfix in flash9 ByteArray serialization fixed genAS3 conflicting classes and interfaces preserve neko output file extension added flash.Event for Flash9 added --no-output fixed neko.net.Socket peer and host methods added neko.io.Process and neko.vm.Ui added haxe.xml.Proxy some flash6 fixes allowed simplequotes for xml attributes in Flash9 and JS flash9 optimizing compiler new faster neko binary AST added haxe.remoting.NekoSocketConnection and SocketProtocol don't allow for...in iteration with Dynamic or Unknown added flash9 resources fixed precedence of ternary operator ?: 2007-05-18: 1.13 fixed bug with local variable masking package in catch type fixed "Not_found" when enum params differs added "override" for AS3 generator fixed stack overflow in typedefs added haxe.Timer.queue, removed delayedArg (use callback instead) fixed haxe.remoting.SocketConnection (msg invertions might occur) add uniqueness check for switch constants js : HtmlCollection and MetaDom.childNodes are not true Arrays allowed semicolon after typedef declaration fixed in-loop closure usage of "for" variable for Flash and JS added neko.net.ThreadRemotingServer.onXml (to handle crossdomain xml) more accurate stack trace for socket remoting prevent some memory leak in haxe.Timer / JS added flash fullscreen support added cond?a:b syntax support added utf8 buffer api added haxelib "dev" mode renamed Http.asyncRequest to customRequest add classes to Neko module export table fixed parametrized enums for Flash6 fixed bug with completion and interfaces fixed --flash-use-stage in Flash9 2007-03-06: 1.12 added flash lite support with -D flash_lite bugfix for Unknown should Unknown prevent some exceptions in neko.net.ProxyDetect fixed ByteArray serialization added neko.Int32 added -x for fast neko scripting prevent locals from breaking class access (works with imports) fix in function overriding subtyping added haxe.remoting.FlashJsConnection fixed tar support in neko.zip.File ide completion support using --display give access to neko.net.Host ip (as Int32) fixed bug when calling super.UpperCaseMethod() hide additional flash Array methods allow leading comma in anonymous types added haxe.Public interface added AS3 code generator field lookup gives priority to superclass over interfaces improved haxedoc output fixed bug in neko regexp split/replace when empty match at eol fixed bug in flash 6-7-8 resources generation 2007-01-28: 1.11 changed StringBuf.add implementation added haxe.Firebug allowed variable return type for overridden/implemented methods display error position in front of each error line improved error messages when optional arguments not matched added neko.io.Path added neko.net.ProxyDetect bugfix in unify : prevent recursive anonymous objects haxe.Http call "prepare" only if size is known added multiple expressions in "case" serialization : deprecated old string format, use urlEncode/Decode added flash9 bytearray serialization (to binary string, for neko com) fixed Type.typeof on some flash9 instances no more dontUseCache (haxe.Serializer.USE_CACHE, default to false) small genxml/haxedoc improvements added Type.enumEq local function parameters are now inferred in several cases optional RTTI for Spod Object bugfix related to callback in neko code generator more type error stack (now includes type parameters) type system fixes in anonymous subtyping added Iterable, changed Lambda added TAR and GZIP support to neko.io.Zip compute minimal array content type fixes in enum switchs 2007-01-01: 1.10 fix in haxe.remoting.SocketConnection.readAnswer fix in postfix incr/decr and getter/setter added haxe.Http.fileTransfert for Neko fixed haxelib to 1.02 (use multipart file transfert) fixed Array.reverse added flash.Lib.getURL and fscommand for Flash9 fixed some ignored parse errors fixed minor syntax : immediate object access allow extend/implements a typedef fixed Flash9 AMF remoting fixed Flash9 bugs in Date object fixed dynamic Array typing bug allowed typedef private field access added Class base class type AsyncConnection.call callback is now optional fixed if/switch with no else/default compilation moved Reflect.createInstance to Type added Reflect.makeVarArgs haXelib 1.03 : several developers per project + web interface 2006-11-22: 1.09 added neko.vm.Module and neko.vm.Loader haxelib : allowed spaces in "run" arguments allowed Thread comparison fixed bug in SWF6 compilation allowed either Mysql or Mysql5 usage replaced db.Connection.hasFeature by db.Connection.dbName added Socket.custom field moved neko.Thread to neko.vm.Thread define haxe_109 (for api changes) fixes in haxe.remoting.Connection and haxe.Unserializer for F9 added haxe.remoting.Connection.urlConnect for JS allowed private typedef fields added neko.net.ThreadServer, ThreadRemotingServer and Poll removed neko.net.RemotingBuffer relaxed enums switchs (allow value in first case) changed "cast" codegeneration (fix some F9 usages) change in POST data handling in mod_neko (max 256K, except multipart) added neko.Web.getClientHeaders and neko.Web.flush "callback" is now a keyword fixed stack overflow when typedef = Dynamic fixed Reflect.createInstance on F9 Array : slice optional length, fixed neko slice & splice + fixed cast return type 2006-10-29: 1.08 fixed bug in flash -debug fixed Sqlite result .length fixed missing "." in OSX/Linux default classpath fixed haxelib NDLL autoloading on OSX fixed bug in deserialization of "\\\r" sequence added inheritance and fields getter/setter to xml output haxedoc 2.0 fixed neko native enum serialization fixed "all constructors matched" for enums without params fixed returned value semantics in neko (prevent remoting leak) more documentation added haxe.rtti package (classes can implement haxe.rtti.Infos) fixed windows line endings in exclude files under linux/osx fixed small bug in "cast" syntax added "callback" for partial function application added --auto-xml for future haxeFD usage fixed Reflect.isFunction minor bugfix in JS code generator new neko.net package allow recursive remoting proxys (skip instead of error) added neko.Thread and neko.Lock MultiThread classes added neko.net.ServerLoop for multiple clients handling 2006-09-11: 1.07 fixed resources in Neko typedef, override, package and f9dynamic are now keywords slighly changed error format output fixed "undefined" serialization and Type.typeof some fixes in haxelib set default classpath for non windows systems added variance fixed bug in bounded type parameters fixed scope bug in try/catch with Flash9 added remoting over XMLSocket and LocalConnection for Flash9 fixed Std.is(*,null) = false allowed >64K Haxe/neko strings -debug and stack traces support for Flash and JS minor changes in xml output 2006-08-28: 1.06 allowed extern enums use only matching construct when parameters are matched fixed bug preventing & char to be sent between JS and Flash remoting improved flash9 api (more strict) flash9 xml : use JS ReXml parser added neko.io package (Input/Output) moved neko.File and neko.Socket to neko.io package fixed flash optional arguments (when extending flash.MC) fixed neko native serialization problems variable modification does not have side effects in 'for x in a...b' jit disabled by default for neko web server enable flash7-8 libraries usage from flash9 unknown identifier become "class not found" when representing a classpath changed haxe.PosInfos handling added -debug (removed --flash-debug) effective on flash9 and neko only now added Type.typeof improved Serializer speed added Serialization support for Date, Hash, IntHash, List added flash9 and JS IE/Opera class reflection added haxe.xml.Check and haxe.xml.Fast added Xml.parent added haxelib added ArrayAccess interface 2006-08-16: 1.05 moved Md5 to haxe package. some method renamed in neko.FileSystem. added neko.remoting.Server.setLogger fixed bug in haxe.Serializer on neko (was preventing List serialization) fixed bugs in Haxe.Unserializer on neko (invalid enum tag & pbs with UTF8 strings) fixed sqlite escape & quote , added BOOL support allowed direct property access in getter/setter (prevent rec loop) allowed event-driven neko http requests forbidden "name" static in js don't allow variable redeclaration in subclasses added && || and ! in conditional compilation rules metas : removed __construct__ and class.toString. metas : __super__ and __interfaces__ now optional added Type api (seperated from Reflect) flash 9 support 2006-07-25: 1.04 added macros in haxe.Template allowed static variables access from a signature shortcut allowed new Signature when signature is a class fixed : modulo priority is now higher than mult and div fixed bug in haxe.Proxy generation fixed more stack overflows with recursive signatures fixed bug in class <: anonymous subtyping (inherited fields) override is not mandatory by default (need --override) added neko just-in-time fixed bugs in haxe.Serializer and haxe.Unserializer (enum format change) changed "signature" by "typedef" (more comprehensible) restricted objects comparisons fixed bug with js operator priority improved performances for haxe.Serializer and haxe.Unserializer fixed bug in static variable lookup (should look class in the last case) prevented several prints of "not enough arguments". 2006-06-23: 1.03 haxedoc executable now part of the distribution removed selectDB from the neko.db.Connection API added optional parameters with selection removed --no-flash-opt-args changes in SWF packages handling fixed optional leading comma in anonymous object and array values fixed bug in inheritend constructor type parameters fixed bug in type_field with inherited type parameters added haxe.Proxy added code transformations for swf/js block variables fixed very tricky bug with constraint parameters used together with polymorphic methods added selective import (import x.y.Class.InnerType) added optional enum constructor parameters added opened anonymous types (no more Unknown has no field...) fixed "MovieClip extends flash.MovieClip". added Reflect.copy added neko.Random added Date.fromString fixed bug in haxe.Unserializer, slighlty optimized haxe.Serializer added __setfield magic (complete __resolve) added explicit override when overriding methods 2006-06-08: 1.02 fixed stack overflow when recursive class <: recursive signature improved a bit commandline : allow several hxml arguments added {> Class, fields... } types declarations added cast without type (less dangerous than untyped) no stage objects by default, added --flash-use-stage added haxe.remoting.DelayedConnection added -exclude removed classpath from neko debug infos filenames fixed bug in Neko empty Array.pop and Neko EReg.replace "" fixed nodeValue for Neko XML comments, doctype, prolog improved DocView : formating, signatures, files generation added neko.zip package fixed bug in neko.File binary flags fixed problems when downloading large files using haxe.Http under Neko neko.db.Connection and neko.db.ResultSet are now interfaces added neko.db.Sqlite and neko sqlite ndll mod_neko2.ndll for Apache2 in Windows distribution fixed bug in static properties method resolution change js.Dom : use cascading signatures and improved api added haxe.unit Unit test framework 2006-05-25: 1.01 added neko.Utf8 Serializer/Unserializer now support utf8 strings allowed subtyping of prop accesses public/private when implementing an interface removed "eval" from Remoting APIs (only calls - more easy to handle). added flash6 support fixed Std.is on different platforms (interfaces implements interface) added AsyncConnection.amfConnect for flash added SWF overflow checks changed "property" to "var" don't allow monorph unification with Dynamic (more safe) allowed multiple parsing and typing errors review and completed commandline options error on backwards constant integer iterators remoting proxy constructor is now public fixed -swf-header override the swflib background color moved all remoting classes into the haxe.remoting package added haxe.remoting.LocalConnection 2006-05-17: 1.0 fixed small bugs in JS Xml Parser (empty attribute, newlines in attributes) added default Content-Type for haxe.Http in JS haxe.AsyncConnection : onError should not be call if error occur in onData fixed infinite loop if haxe.Unserializer.readDigits reach eof on JS/Flash fixed bugs in neko.Web and neko.Sys (some methods returning "null" instead of null) added neko.Socket.setBlocking for nonblocking sockets fixed bug in js generator when using cascading iterators fixed typing bug when overloading parametrized method fixed bug in js generator when "try" without curly braces. allowed enum catching added remoting proxys allowed neko.Web API commandline emulation outside mod_neko removed subtyping Anon :> Instance added signatures, Iterator is now a signature getter/setter and public/private unification allowed anonymous declaration with interface-style syntax (for signatures) optimized code generated for underscore in enum matches parameters fixed flash/js String.charCodeAt(outside) => null fixed neko charAt(outside) => "" added errors for strings containing \0 in JS and Flash added HAXE_LIBRARY_PATH environment variable support fixed interfaces inheritance : can't extend, can implement (type-sums) fixed fixed >64K resource bug in SWF fixed newline problems with Flash/JS Connection 2006-05-02: RC1 added the Socket class fixed a bug of returned value in neko with 6 or more parameters added "Missing type" error for catchs. added regular expressions (still missing Flash implementation) fixed type printing and parenthesis in type declarations different behavior when elements removed during Array.iteration fixed genswf : local variables used in for...function improved type parameters structure coherency enable usage of Spod without Transaction implemented neko.db.Transaction.isDeadlock slighly relaxed one of the javascript generator constraint added haxe.Template moved Log , PosInfos and ImportAll to haxe package completed private class/interface/enum support removed Array.indexes added __resolve compile-time support when class implement Dynamic added haxe Remoting added "module with different case" error (for windows) added Reflect.resolveClass, Reflect.resolveEnum, Reflect.setPrototype added access to classes by name in genneko added enum.__ename__ fixed Std.is(e,enum) fixed infinite loop in neko EReg split/replace and epsilon matching added neko native serialization support fixed syntax for multiple constraints in type parameter added recursive type parameters constraints (T : C constraints) updated Xml handling 2006-04-17: beta 5 fixed bug : continue in do...while changed typing order for do...while (infer condition after block) fixed JS "catch" generation fixed extending flash.* extern class fixed bug in neko generator w/ closures fixed bug in js generator (return switch need correct "this" context) fixed bug in for x in a...b : invalid local variables overridding added properties fixed bug in js generator : while...switch...break new List implementation can use static function __init__ on every platform bug fixes in Reflect.fields added Hash.remove, changed Hash/JS implementation added flash __delete__ support added neko.db.Object, Manager, Transaction fixed neko class.__interfaces__ added "assigning a value to itself" error added automatic PosInfos when is last parameter added polymorphic methods added check_flash_args support 2006-04-02: beta 4 fixed javascript events case fixed invalid use of physeq fixed + type inference added -altfmt allowed anonymous <: class subtyping relaxed unifications of expressions in "for" and "while" more methods in List syntax changes : mandatory parenthesis for "for" and "while" allowed any kind of identifier almost everywhere moved tools, flash, js and neko inside "std" no need for 0x in flash header bgcolor added -res fixed type parameter contraint holes Std.is Dynamic always returns true added Enum.toString neko : env locals can be modified in inner functions completed js keywords list in generator added Reflect.typeof prioritize neko.Lib.load static calls fixed bugs in for...in optimization with continue fixed Reflect fields, added documentation, added Class added javascript closures, fixed null closures on flash and Neko added javascript __init__ statics and js.XMLHttpRequest added neko.Stack fixed bug in Std.ord convert neko string to haxe string on catch automaticaly creates empty clips for classes extending flash.MovieClip unify stack : several meaningful unification errors added cast operation and keyword 2006-03-11: beta 3 javascript generator optimized for in interval renaming of locals (name must be unique) added uncaught exceptions handling in Flash fixed Bool.true == true and Bool.false == false on all platforms fixed matching on Bool different from enums removed -fplayer (use -D instead) and added -fheader fixed infinity is Int added "here" special identifier neko Apis : File, FileSystem, Sys added base JS API 2006-02-19: beta 2 renamed neko.db.Result to neko.db.ResultSet added Date support for Mysql results added private fields for static class anonymous types disambigous >=, >>= and >>>= fixed inheritance bug in swf and neko generators improved function parameters type error reporting. allowed variable number of args for flash.* constructors. added Math.random(), Reflect.empty() added flash.XMLSocket and flash.Timer classes completed Std class with conversion functions and others. completed flash.Lib class with flash toplevel functions. fixed bugs in neko webserver 2006-02-04: beta 1 allowed array literals to be dynamic use neko 1.2 commandline and prototypes changed #cond to #if cond for conditional compilation all fields are defined to null by default defined __class__ and other meta accesses for Flash and Neko fixed type hole for compiler-know types (should not resolve using imports) changed packages : neko.* and flash.* (with protection) added Lazy types : type the fields when they are needed with recursion untyped accesses are monomorphs, not dynamics generated __string check that toString() return an object XmlParser and other APIs for Neko fixed escaped chars in Neko generation conservative static initialization order allowed no type parameters for new Class function types carry parameter names anonymous types contain private variables (for private static accesses) added optional name for anonymous types in typer (for static accesses) private classes and enums (partial support) improved error message for invalid number of arguments flash extern classes can take variable number of args. added -swf-lib for importing SWF library added neko.db package 2005-12-23: alpha 5 added -main commandline parameter catches are now working with Neko restricted catch types for type-safety added constructor inheritance + check if superconstructor is called allowed Dynamic-only subtyping on type parameters added method closures to Neko generation added class Reflect added License : libraries are BSD added -xml documentation output allowed class instance :> anonymous subtyping 2005-12-10: alpha 4 forbid break and continue outside loops fixed SWF generation bugs added SWF "extends" support added method closures added some flash lowlevel operations (__xxx__) added Log, LogInfos and trace added Neko generation fixed problems with conditional compilation macros 2005-11-30: alpha 3 added Flash extern classes Boot initialization added "untyped" added conditional compilation added interfaces changed iterators from closures to objects added (XML)Node and XmlParser for Flash 2005-11-25: alpha 2 swf generation (missing iterators) some typing fixes 2005-11-17: alpha 1b fix some bugs changed package tests.lang 2005-11-14: alpha 1 lexer parser typer haxe_4.2.4.orig/extra/CONTRIB.txt0000644000175000017500000000513314146064214016367 0ustar andyandy00000000000000Contributor License Agreement : You accept and agree to the following terms and conditions for Your present and future Contributions submitted to the project Haxe : 1) Definitions "Contribution" : any source code, documentation, including any modifications or additions to an existing work that is intentionally submitted by You to the Haxe Foundation for inclusion in, or documentation of, any of the products managed and maintained by the Haxe Foundation. "Submitted" means any form or electronic, verbal or written communication, including but not limited to communication on electronic mailing lists, source code control systems and issue tracking system that are managed by, or on behalf of, the Haxe Foundation for the purpose of improving Haxe. 2) Grant of Copyright License. Subject to the terms and conditions of this Grant, You hereby grant to the Haxe Foundation and to recipients of software distributed by the Haxe Foundation a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your Contributions and such derivative works. 3) You represent that you are legally entitled to grant the above license. If your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to the Haxe Foundation, or that your employer has executed a separate Corporate Contributor License Grant with the Haxe Foundation. 4) You represent that each of Your Contributions is Your original creation (see section 7 for submissions on behalf of others). You represent that Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions. 5) You are not expected to provide support for Your Contributions, except to the extent You desire to provide support. You may provide support for free, for a fee, or not at all. Unless required by applicable law or agreed to in writing, You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON- INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. Full Name : Email : Mailing Address : Country : Signature:haxe_4.2.4.orig/extra/EnvVarUpdate.nsh0000644000175000017500000002410114146064214017600 0ustar andyandy00000000000000/** * EnvVarUpdate.nsh * : Environmental Variables: append, prepend, and remove entries * * WARNING: If you use StrFunc.nsh header then include it before this file * with all required definitions. This is to avoid conflicts * * Usage: * ${EnvVarUpdate} "ResultVar" "EnvVarName" "Action" "RegLoc" "PathString" * * Credits: * Version 1.0 * * Cal Turney (turnec2) * * Amir Szekely (KiCHiK) and e-circ for developing the forerunners of this * function: AddToPath, un.RemoveFromPath, AddToEnvVar, un.RemoveFromEnvVar, * WriteEnvStr, and un.DeleteEnvStr * * Diego Pedroso (deguix) for StrTok * * Kevin English (kenglish_hi) for StrContains * * Hendri Adriaens (Smile2Me), Diego Pedroso (deguix), and Dan Fuhry * (dandaman32) for StrReplace * * Version 1.1 (compatibility with StrFunc.nsh) * * techtonik * * http://nsis.sourceforge.net/Environmental_Variables:_append%2C_prepend%2C_and_remove_entries * */ !ifndef ENVVARUPDATE_FUNCTION !define ENVVARUPDATE_FUNCTION !verbose push !verbose 3 !include "LogicLib.nsh" !include "WinMessages.NSH" !include "StrFunc.nsh" ; ---- Fix for conflict if StrFunc.nsh is already includes in main file ----------------------- !macro _IncludeStrFunction StrFuncName !ifndef ${StrFuncName}_INCLUDED ${${StrFuncName}} !endif !ifndef Un${StrFuncName}_INCLUDED ${Un${StrFuncName}} !endif !define un.${StrFuncName} "${Un${StrFuncName}}" !macroend !insertmacro _IncludeStrFunction StrTok !insertmacro _IncludeStrFunction StrStr !insertmacro _IncludeStrFunction StrRep ; ---------------------------------- Macro Definitions ---------------------------------------- !macro _EnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString Push "${EnvVarName}" Push "${Action}" Push "${RegLoc}" Push "${PathString}" Call EnvVarUpdate Pop "${ResultVar}" !macroend !define EnvVarUpdate '!insertmacro "_EnvVarUpdateConstructor"' !macro _unEnvVarUpdateConstructor ResultVar EnvVarName Action Regloc PathString Push "${EnvVarName}" Push "${Action}" Push "${RegLoc}" Push "${PathString}" Call un.EnvVarUpdate Pop "${ResultVar}" !macroend !define un.EnvVarUpdate '!insertmacro "_unEnvVarUpdateConstructor"' ; ---------------------------------- Macro Definitions end------------------------------------- ;----------------------------------- EnvVarUpdate start---------------------------------------- !define hklm_all_users 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' !define hkcu_current_user 'HKCU "Environment"' !macro EnvVarUpdate UN Function ${UN}EnvVarUpdate Push $0 Exch 4 Exch $1 Exch 3 Exch $2 Exch 2 Exch $3 Exch Exch $4 Push $5 Push $6 Push $7 Push $8 Push $9 Push $R0 /* After this point: ------------------------- $0 = ResultVar (returned) $1 = EnvVarName (input) $2 = Action (input) $3 = RegLoc (input) $4 = PathString (input) $5 = Orig EnvVar (read from registry) $6 = Len of $0 (temp) $7 = tempstr1 (temp) $8 = Entry counter (temp) $9 = tempstr2 (temp) $R0 = tempChar (temp) */ ; Step 1: Read contents of EnvVarName from RegLoc ; ; Check for empty EnvVarName ${If} $1 == "" SetErrors DetailPrint "ERROR: EnvVarName is blank" Goto EnvVarUpdate_Restore_Vars ${EndIf} ; Check for valid Action ${If} $2 != "A" ${AndIf} $2 != "P" ${AndIf} $2 != "R" SetErrors DetailPrint "ERROR: Invalid Action - must be A, P, or R" Goto EnvVarUpdate_Restore_Vars ${EndIf} ${If} $3 == HKLM ReadRegStr $5 ${hklm_all_users} $1 ; Get EnvVarName from all users into $5 ${ElseIf} $3 == HKCU ReadRegStr $5 ${hkcu_current_user} $1 ; Read EnvVarName from current user into $5 ${Else} SetErrors DetailPrint 'ERROR: Action is [$3] but must be "HKLM" or HKCU"' Goto EnvVarUpdate_Restore_Vars ${EndIf} ; Check for empty PathString ${If} $4 == "" SetErrors DetailPrint "ERROR: PathString is blank" Goto EnvVarUpdate_Restore_Vars ${EndIf} ; Make sure we've got some work to do ${If} $5 == "" ${AndIf} $2 == "R" SetErrors DetailPrint "$1 is empty - Nothing to remove" Goto EnvVarUpdate_Restore_Vars ${EndIf} ; Step 2: Scrub EnvVar ; StrCpy $0 $5 ; Copy the contents to $0 ; Remove spaces around semicolons (NOTE: spaces before the 1st entry or ; after the last one are not removed here but instead in Step 3) ${If} $0 != "" ; If EnvVar is not empty ... ${Do} ${${UN}StrStr} $7 $0 " ;" ${If} $7 == "" ${ExitDo} ${EndIf} ${${UN}StrRep} $0 $0 " ;" ";" ; Remove ';' ${Loop} ${Do} ${${UN}StrStr} $7 $0 "; " ${If} $7 == "" ${ExitDo} ${EndIf} ${${UN}StrRep} $0 $0 "; " ";" ; Remove ';' ${Loop} ${Do} ${${UN}StrStr} $7 $0 ";;" ${If} $7 == "" ${ExitDo} ${EndIf} ${${UN}StrRep} $0 $0 ";;" ";" ${Loop} ; Remove a leading or trailing semicolon from EnvVar StrCpy $7 $0 1 0 ${If} $7 == ";" StrCpy $0 $0 "" 1 ; Change ';' to '' ${EndIf} StrLen $6 $0 IntOp $6 $6 - 1 StrCpy $7 $0 1 $6 ${If} $7 == ";" StrCpy $0 $0 $6 ; Change ';' to '' ${EndIf} ; DetailPrint "Scrubbed $1: [$0]" ; Uncomment to debug ${EndIf} /* Step 3. Remove all instances of the target path/string (even if "A" or "P") $6 = bool flag (1 = found and removed PathString) $7 = a string (e.g. path) delimited by semicolon(s) $8 = entry counter starting at 0 $9 = copy of $0 $R0 = tempChar */ ${If} $5 != "" ; If EnvVar is not empty ... StrCpy $9 $0 StrCpy $0 "" StrCpy $8 0 StrCpy $6 0 ${Do} ${${UN}StrTok} $7 $9 ";" $8 "0" ; $7 = next entry, $8 = entry counter ${If} $7 == "" ; If we've run out of entries, ${ExitDo} ; were done ${EndIf} ; ; Remove leading and trailing spaces from this entry (critical step for Action=Remove) ${Do} StrCpy $R0 $7 1 ${If} $R0 != " " ${ExitDo} ${EndIf} StrCpy $7 $7 "" 1 ; Remove leading space ${Loop} ${Do} StrCpy $R0 $7 1 -1 ${If} $R0 != " " ${ExitDo} ${EndIf} StrCpy $7 $7 -1 ; Remove trailing space ${Loop} ${If} $7 == $4 ; If string matches, remove it by not appending it StrCpy $6 1 ; Set 'found' flag ${ElseIf} $7 != $4 ; If string does NOT match ${AndIf} $0 == "" ; and the 1st string being added to $0, StrCpy $0 $7 ; copy it to $0 without a prepended semicolon ${ElseIf} $7 != $4 ; If string does NOT match ${AndIf} $0 != "" ; and this is NOT the 1st string to be added to $0, StrCpy $0 $0;$7 ; append path to $0 with a prepended semicolon ${EndIf} ; IntOp $8 $8 + 1 ; Bump counter ${Loop} ; Check for duplicates until we run out of paths ${EndIf} ; Step 4: Perform the requested Action ; ${If} $2 != "R" ; If Append or Prepend ${If} $6 == 1 ; And if we found the target DetailPrint "Target is already present in $1. It will be removed and" ${EndIf} ${If} $0 == "" ; If EnvVar is (now) empty StrCpy $0 $4 ; just copy PathString to EnvVar ${If} $6 == 0 ; If found flag is either 0 ${OrIf} $6 == "" ; or blank (if EnvVarName is empty) DetailPrint "$1 was empty and has been updated with the target" ${EndIf} ${ElseIf} $2 == "A" ; If Append (and EnvVar is not empty), StrCpy $0 $0;$4 ; append PathString ${If} $6 == 1 DetailPrint "appended to $1" ${Else} DetailPrint "Target was appended to $1" ${EndIf} ${Else} ; If Prepend (and EnvVar is not empty), StrCpy $0 $4;$0 ; prepend PathString ${If} $6 == 1 DetailPrint "prepended to $1" ${Else} DetailPrint "Target was prepended to $1" ${EndIf} ${EndIf} ${Else} ; If Action = Remove ${If} $6 == 1 ; and we found the target DetailPrint "Target was found and removed from $1" ${Else} DetailPrint "Target was NOT found in $1 (nothing to remove)" ${EndIf} ${If} $0 == "" DetailPrint "$1 is now empty" ${EndIf} ${EndIf} ; Step 5: Update the registry at RegLoc with the updated EnvVar and announce the change ; ClearErrors ${If} $3 == HKLM WriteRegExpandStr ${hklm_all_users} $1 $0 ; Write it in all users section ${ElseIf} $3 == HKCU WriteRegExpandStr ${hkcu_current_user} $1 $0 ; Write it to current user section ${EndIf} IfErrors 0 +4 MessageBox MB_OK|MB_ICONEXCLAMATION "Could not write updated $1 to $3" DetailPrint "Could not write updated $1 to $3" Goto EnvVarUpdate_Restore_Vars ; "Export" our change SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 EnvVarUpdate_Restore_Vars: ; ; Restore the user's variables and return ResultVar Pop $R0 Pop $9 Pop $8 Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Push $0 ; Push my $0 (ResultVar) Exch Pop $0 ; Restore his $0 FunctionEnd !macroend ; EnvVarUpdate UN !insertmacro EnvVarUpdate "" !insertmacro EnvVarUpdate "un." ;----------------------------------- EnvVarUpdate end---------------------------------------- !verbose pop !endif haxe_4.2.4.orig/extra/FileAssociation.nsh0000644000175000017500000001076614146064214020324 0ustar andyandy00000000000000/* _____________________________________________________________________________ File Association _____________________________________________________________________________ Based on code taken from http://nsis.sourceforge.net/File_Association Usage in script: 1. !include "FileAssociation.nsh" 2. [Section|Function] ${FileAssociationFunction} "Param1" "Param2" "..." $var [SectionEnd|FunctionEnd] FileAssociationFunction=[RegisterExtension|UnRegisterExtension] _____________________________________________________________________________ ${RegisterExtension} "[executable]" "[extension]" "[description]" "[executable]" ; executable which opens the file format ; "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; ${UnRegisterExtension} "[extension]" "[description]" "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; _____________________________________________________________________________ Macros _____________________________________________________________________________ Change log window verbosity (default: 3=no script) Example: !include "FileAssociation.nsh" !insertmacro RegisterExtension ${FileAssociation_VERBOSE} 4 # all verbosity !insertmacro UnRegisterExtension ${FileAssociation_VERBOSE} 3 # no script */ !ifndef FileAssociation_INCLUDED !define FileAssociation_INCLUDED !include Util.nsh !verbose push !verbose 3 !ifndef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE 3 !endif !verbose ${_FileAssociation_VERBOSE} !define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` !verbose pop !macro FileAssociation_VERBOSE _VERBOSE !verbose push !verbose 3 !undef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE ${_VERBOSE} !verbose pop !macroend !macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_DESCRIPTION}` Push `${_EXTENSION}` Push `${_EXECUTABLE}` ${CallArtificialFunction} RegisterExtension_ !verbose pop !macroend !macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_EXTENSION}` Push `${_DESCRIPTION}` ${CallArtificialFunction} UnRegisterExtension_ !verbose pop !macroend !define RegisterExtension `!insertmacro RegisterExtensionCall` !define un.RegisterExtension `!insertmacro RegisterExtensionCall` !macro RegisterExtension !macroend !macro un.RegisterExtension !macroend !macro RegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R2 ;exe Exch Exch $R1 ;ext Exch Exch 2 Exch $R0 ;desc Exch 2 Push $0 Push $1 ReadRegStr $1 HKCR $R1 "" ; read current file association StrCmp "$1" "" NoBackup ; is it empty StrCmp "$1" "$R0" NoBackup ; is it our own WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value NoBackup: WriteRegStr HKCR $R1 "" "$R0" ; set our file association ReadRegStr $0 HKCR $R0 "" StrCmp $0 "" 0 Skip WriteRegStr HKCR "$R0" "" "$R0" WriteRegStr HKCR "$R0\shell" "" "open" WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" Skip: WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' Pop $1 Pop $0 Pop $R2 Pop $R1 Pop $R0 !verbose pop !macroend !define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !macro UnRegisterExtension !macroend !macro un.UnRegisterExtension !macroend !macro UnRegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R1 ;desc Exch Exch $R0 ;ext Exch Push $0 Push $1 ReadRegStr $1 HKCR $R0 "" StrCmp $1 $R1 0 NoOwn ; only do this if we own it ReadRegStr $1 HKCR $R0 "backup_val" StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key DeleteRegKey HKCR $R0 Goto NoOwn Restore: WriteRegStr HKCR $R0 "" $1 DeleteRegValue HKCR $R0 "backup_val" DeleteRegKey HKCR $R1 ;Delete key with association name settings NoOwn: Pop $1 Pop $0 Pop $R1 Pop $R0 !verbose pop !macroend !endif # !FileAssociation_INCLUDEDhaxe_4.2.4.orig/extra/ImportAll.hx0000644000175000017500000001052314146064214016771 0ustar andyandy00000000000000/* * Copyright (C)2005-2018 Haxe Foundation * * 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. */ import haxe.macro.Context; class ImportAll { static function isSysTarget() { return Context.defined("neko") || Context.defined("php") || Context.defined("cpp") || Context.defined("java") || Context.defined("python") || Context.defined("lua") || Context.defined("hl") || Context.defined("eval"); // TODO: have to add cs here, SPOD gets in the way at the moment } public static function run( ?pack ) { if( pack == null ) { pack = ""; haxe.macro.Compiler.define("doc_gen"); } if (Context.defined("interp")) { haxe.macro.Compiler.define("macro"); } switch( pack ) { case "php": if( !Context.defined("php") ) return; case "neko": if( !Context.defined("neko") ) return; case "js": if( !Context.defined("js") ) return; case "cpp": if( !Context.defined("cpp") ) return; case "flash": if( !Context.defined("flash9") ) return; case "mt","mtwin": return; case "sys": if(!isSysTarget()) return; case "sys.thread": if ( !Context.defined("target.threaded") ) return; case "java": if( !Context.defined("java") ) return; case "jvm": if( !Context.defined("jvm") ) return; case "cs": if( !Context.defined("cs") ) return; case "python": if ( !Context.defined("python") ) return; case "hl": if( !Context.defined("hl") ) return; case "lua": if( !Context.defined("lua") ) return; case "eval": if( !Context.defined("eval") ) return; case "ssl": if (!Context.defined("neko") && !Context.defined("cpp")) return; case "tools", "build-tool", "jar-tool": return; } for( p in Context.getClassPath() ) { if( p == "/" || p == "" ) continue; // skip if we have a classpath to haxe if( pack.length == 0 && sys.FileSystem.exists(p+"std") ) continue; var p = p + pack.split(".").join("/"); if( StringTools.endsWith(p,"/") ) p = p.substr(0,-1); if( !sys.FileSystem.exists(p) || !sys.FileSystem.isDirectory(p) ) continue; for( file in sys.FileSystem.readDirectory(p) ) { if( file == ".svn" || file == "_std" ) continue; var full = (pack == "") ? file : pack + "." + file; if( StringTools.endsWith(file, ".hx") && file.substr(0, file.length - 3).indexOf(".") < 0 ) { var cl = full.substr(0, full.length - 3); switch( cl ) { case "ImportAll", "neko.db.MacroManager": continue; case "haxe.TimerQueue": if( Context.defined("neko") || Context.defined("php") || Context.defined("cpp") ) continue; case "Sys": if(!isSysTarget()) continue; case "haxe.web.Request": if( !(Context.defined("neko") || Context.defined("php") || Context.defined("js")) ) continue; case "haxe.macro.ExampleJSGenerator","haxe.macro.Context", "haxe.macro.Compiler": if( !Context.defined("eval") ) continue; case "haxe.remoting.SocketWrapper": if( !Context.defined("flash") ) continue; case "haxe.remoting.SyncSocketConnection": if( !(Context.defined("neko") || Context.defined("php") || Context.defined("cpp")) ) continue; case "neko.vm.Ui" | "sys.db.Sqlite" | "sys.db.Mysql" if ( Context.defined("interp") ): continue; case "sys.db.Sqlite" | "sys.db.Mysql" | "cs.db.AdoNet" if ( Context.defined("cs") ): continue; } Context.getModule(cl); } else if( sys.FileSystem.isDirectory(p + "/" + file) ) run(full); } } } } haxe_4.2.4.orig/extra/LICENSE.txt0000644000175000017500000004011514146064214016350 0ustar andyandy00000000000000Haxe Licenses ------------- For details about Haxe Licenses, please read http://haxe.org/foundation/open-source.html The Haxe Standard Library MIT License : -------------------------- Copyright (C)2005-2016 Haxe Foundation 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. The Haxe compiler GPL License : ------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS haxe_4.2.4.orig/extra/WinSetup.hx0000644000175000017500000000676214146064214016656 0ustar andyandy00000000000000import sys.io.Process; using haxe.io.Path; using StringTools; using sys.FileSystem; using WinSetup; enum abstract RegDataType(String) to String { var REG_EXPAND_SZ:RegDataType; var REG_SZ:RegDataType; } class AccessDenied { public var message:String; public function new(msg:String) message = msg; public function toString() return message; } class WinSetup { static inline var HAXEPATH = 'HAXEPATH'; static inline var NEKO_INSTPATH = 'NEKO_INSTPATH'; static inline var REG_HKLM_ENVIRONMENT = 'HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment'; static inline var REG_HKCU_ENVIRONMENT = 'HKEY_CURRENT_USER\\Environment'; static function main() { try { try { run(REG_HKLM_ENVIRONMENT); } catch(e:AccessDenied) { run(REG_HKCU_ENVIRONMENT); } } catch(e:Dynamic) { Sys.stderr().writeString(Std.string(e) + '\n'); #if debug Sys.stderr().writeString(haxe.CallStack.toString(haxe.CallStack.exceptionStack()) + '\n'); #end Sys.stderr().flush(); #if debug Sys.println('Press any key to exit...'); Sys.getChar(false); #end Sys.exit(1); } } static function envVar(name:String):String { return '%$name%'; } static function run(regDir:String) { var haxePath = Sys.getCwd().removeTrailingSlashes(); var addHaxe = '$haxePath\\haxe.exe'.exists(); if(addHaxe) { setRegValue(regDir, HAXEPATH, REG_SZ, haxePath); } var nekoPath = Path.join([Path.directory(haxePath), 'neko']).replace('/', '\\'); var addNeko = '$nekoPath\\neko.exe'.exists(); if(addNeko) { setRegValue(regDir, NEKO_INSTPATH, REG_SZ, nekoPath); } if(!addHaxe && !addNeko) { return; } var paths = readPath(regDir).split(';'); addHaxe = paths.indexOf(HAXEPATH.envVar()) < 0 && addHaxe; if(addHaxe) { paths.push(HAXEPATH.envVar()); } addNeko = paths.indexOf(NEKO_INSTPATH.envVar()) < 0 && addNeko; if(addNeko) { paths.push(NEKO_INSTPATH.envVar()); } if(addHaxe || addNeko) { setRegValue(regDir, 'path', REG_EXPAND_SZ, paths.join(';')); } } static function readPath(regDir:String):String { var p = new Process('reg', ['query', regDir, '/v', 'path']); if(p.exitCode() != 0) { var error = p.stderr.readAll().toString(); p.close(); throw 'Cannot query reg.exe for PATH:\n$error'; } /** * Sample response: * * HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment * path REG_EXPAND_SZ %SystemRoot%\system32;%SystemRoot%;%SystemRoo<...> */ var response = p.stdout.readAll().toString(); p.close(); var lines = response.split('\n'); for(line in lines) { line = line.trim(); if(line.substr(0, 'path'.length).toLowerCase() == 'path') { var column = 0; var wasSpace = false; for(pos in 0...line.length) { var isSpace = line.isSpace(pos); if(wasSpace && !isSpace) { column++; if(column == 2) { return line.substr(pos); } } wasSpace = isSpace; } } } throw 'Cannot parse a query to reg.exe for PATH value:\n$response'; } static function setRegValue(regDir:String, name:String, dataType:RegDataType, value:T) { var p = new Process('reg', ['add', regDir, '/v', name, '/t', dataType, '/d', '$value', '/f']); if(p.exitCode() != 0) { var error = p.stderr.readAll().toString(); p.close(); var msg = 'Cannot set a value for $name via reg.exe:\n$error'; if(~/access(.*)denied/i.match(error)) { throw new AccessDenied(msg); } else { throw msg; } } p.close(); } }haxe_4.2.4.orig/extra/all.hxml0000644000175000017500000000077514146064214016177 0ustar andyandy00000000000000--no-output --macro ImportAll.run() -D doc-gen --each -neko all.n -xml neko.xml --next -js all.js -xml js.xml --next -swf all9.swf -xml flash9.xml --swf-version 11.4 --next -php all_php -xml php.xml --next -cpp all_cpp -xml cpp.xml -D HXCPP_MULTI_THREADED --next -java all_java -xml java.xml --next --jvm all_jvm -xml jvm.xml --next -cs all_cs -D unsafe -xml cs.xml --next -python all_python -xml python.xml --next -hl all_hl -xml hl.xml --next --interp -xml interp.xml --next -xml cross.xml haxe_4.2.4.orig/extra/all.hxproj0000644000175000017500000000321514146064214016531 0ustar andyandy00000000000000 haxe all.hxml haxe_4.2.4.orig/extra/bintray.tpl.json0000644000175000017500000000171414146064214017670 0ustar andyandy00000000000000{ "package": { "name": "haxe", "repo": "snapshot", "subject": "::packageSubject::" }, "version": { "name": "::versionName::", "desc": "::versionDesc::", "released": "::gitDate::", "attributes": [ {"name": "repo", "values" : ["::gitRepo::"], "type": "string"}, {"name": "branch", "values" : ["::gitBranch::"], "type": "string"}, {"name": "commit", "values" : ["::gitCommit::"], "type": "string"} ], "gpgSign": false }, "files": [ {"includePattern": "out/(.*)_src\\.(.*)", "uploadPattern": "::os::/::gitBranch::/haxe_::versionName::_src.$2"}, {"includePattern": "out/(.*)_bin\\.(.*)", "uploadPattern": "::os::/::gitBranch::/haxe_::versionName::_bin.$2"}, {"includePattern": "out/(.*)_doc\\.(.*)", "uploadPattern": "::os::/::gitBranch::/haxe_::versionName::_doc.$2"} ], "publish": true }haxe_4.2.4.orig/extra/brew-flash-update.md0000644000175000017500000000136614146064214020366 0ustar andyandy00000000000000# How to update flash player signatures in Brew It's easiest to use a mac to do the update since there is a developer script provided by homebrew-cask that can semi-automate the thing. Steps: 1. clone https://github.com/Homebrew/homebrew-cask 2. Run ./developer/bin/update_cask_family flash $NEW_VERSION_STRING If homebrew-cask's CI succeed, the PR will be automatically merged by a bot, and our CI is saved. The super annoying thing is that, homebrew-cask's CI will check Adobe's appcast for the version string, but the appcast is usually outdated until about a day after the new Flash Player release. See https://github.com/Homebrew/homebrew-cask/pull/73950#issuecomment-563920561 ---- Example PR: https://github.com/Homebrew/homebrew-cask/pull/73952haxe_4.2.4.orig/extra/choco/haxe.nuspec0000644000175000017500000000400314146064214017760 0ustar andyandy00000000000000 haxe @SNAPSHOT_VERSION@ Haxe Haxe Foundation Haxe Foundation http://haxe.org/foundation/open-source.html http://haxe.org/ http://haxe.org/manual/introduction.html https://groups.google.com/forum/#!forum/haxelang https://github.com/HaxeFoundation/haxe/issues https://github.com/HaxeFoundation/haxe https://github.com/HaxeFoundation/haxe/tree/master/extra/choco http://haxe.org/img/haxe-logo.svg false Haxe is an open source toolkit based on a modern, high level, strictly typed programming language, a cross-compiler, a complete cross-platform standard library and ways to access each platform's native capabilities. Haxe is an open source toolkit based on a modern, high level, strictly typed programming language, a cross-compiler, a complete cross-platform standard library and ways to access each platform's native capabilities. This package will install haxe and haxelib. After installation, you should run `haxelib setup %path%;`, where `%path%` is the haxelib repository folder for placing third-party libraries. The folder should be created manually before running the command. https://github.com/HaxeFoundation/haxe/blob/master/extra/CHANGES.txt haxe programming development foss cross-platform haxe_4.2.4.orig/extra/clean-whitespace0000755000175000017500000000027614146064214017673 0ustar andyandy00000000000000#!/bin/sh # # Remove trailing whitespace from Haxe files # Exclude generated js.html.* for now find -path ./std/js/html -prune -o -name '*.hx' -print0 | xargs -0 perl -pi -e "s/[ \t]+$//" haxe_4.2.4.orig/extra/deploy_key.enc0000644000175000017500000000630014146064214017356 0ustar andyandy00000000000000Salted__Žk‘½‰56yÿÉ1)s/õ¾zó”øÆ ™+oØ ¡©ZõWœ¢G#‰Yâ%wèh;T`Üæޓ=®0¯„®“^héMÃ*çT˜Ôm?vöK”‡rßÉE(,û]ŸO÷Ý'ÛŽöìm‰wÖ$¨HGóüìågcûD½[˜EËyBwï¡þQ V ¹¤˜­J¨:Pú‡Pk„ľ˜{ºT«ƒ áò5àã×kÊÔ-qß:ÁLþ ‘~-U—)g«8Ç 9š[F·4(Î}Í$XUÏ–­ÌaR.1‹¼s‰[x9Äi±öIàFΙɢââF^G@8Ÿzí:–Ïâ/í¡àÆ £Ëmt+B„îÀQ°ÎéÒêo«tðôæ»bГΗî0¯=öþ@–dpÚ€øO®„öUOkœÆ3âÈ´NöùÿÿÛ';9ÞpʇŽþ‡ðw8ußLRdD: »éæf éTTùjöÔ‹û$8¡ ¢ø©“|—K<šäIu²à‚l:’$m÷ºkM/—áHAòóÀd§ˆªwcþfw hùÜ—œÝoô[ ó–Ø^H ¬2ûÖš:n'­ãÞsní^=Š,ŸxP¤¼, 6’>…“‹KÓÒ4~–C6G]ßa]½ ½T’ di3QY;I½õõ ’s(î/JbÕú½'4Ý:2¤öh=)ƒ4àò2‹Ì\=ùÎr'¯¯êX\´4s:Þ¶9—ò"Ò-â™ÏÚ)£zÅbH5ÝE-:BÑQêqû ­'ÚˆØpªPßþNæû"P[¨­G‚Æú5oßy©Ë$¡]ó;h ËþSµìt»¨91±{Ân–q÷b8ì¤Ó~!ÅÞÄÀ8 ššá0µÜjåì¸îTÒ…±i|fCô×Õ@ÊJ®ÝŽôŒ’Ny?±¶‹‹Ÿú»bƒÀÑ©†à¦ý5θ›^ð}wz—PLú4§oXDdª(â·GÌÃ~wðǦÀ™H¸áù¡¾’Fd¾6¾«õtxHl03£!êðl,ˆËíS¤=Ìýow¤vùÕ’.cTMO‚SÏÿ‘kÍáO´RRÑ øÌ{S% 4øè{JÓ¤ ÖnP°í¯£ì¶Å–Õ“l'E;ÅÉé‰ÇŠo÷· e®c­Ÿ—‡WŠ-e"Ÿ¶ô½L*] Nòã+CÅS§&†b,<™íÆÒ×h¬ˆf+…Ks`¾•Eµ­±Ô½ð]0 äDõ¶ò“ŽPÏ®Ü,-.'EKõÓNÀXêfÜ„`à • +`&_O:äûGEÁ-œ&ÏÿfiP{¡^ÏŸ³¤åªºË“ñ€Í±XF‹Q“vïS·¥ä‹eüýJF¯Ê(Ж:„}§ãÀTÄGØ­¡ü´ŽkI…œ~Û.€#r ÞóÕÅJ8ä#ú·+àDv[ïgN·øwáW8{mXë†RÈ´öõàd€3³:Ryu@Š 8†>Vôzãõ‡qÍw½ü¬ •uÚx~&@P#ovКµ¯ÌhE¸i»àþ¼ù 3×¾~ØÑÚUD€ÉzNµÈ¦ õ+&v:“úteJŸL|*òüJŽUÛ (`mc74Æ| F^ÕV*©l_?ÖHî¬ÒŒ ]R–V4nAa¦  ‡ÙRAá¬cìõ»£ûܯ\d>Ô­„0¾Á¿s*àP7ÕS;Ç.¹E 7É.c¬™I‹ƒ.Ù‡‰ÀåûóàÐ<NÛ„YZá01!©p¥Í= ÓÖ„—øtvW7ï’i¡I†½K¨2¦R-æˆÂY¿!Ë‹ºÄÏÏ{PMÓå`ŸU™àl<{ׯ¡hò’­sd=»µiï!ñ!NjKåIŠÌŸTc>V^N®¿›áÎI9ú¬ª& ®LÛë’s´”ŽXÀ2‚/.ŸmÜÍ/øÆw¦Â8[m."Ù“4±uëFN´s]¨Ì‹|¼˜ùÐàH¯¤d L¹-W©@…&¼5Ö!¯!Î(¥ïàFð2Õþe}Aq,Ò焈Éã³±"¤BГ´†P¤ê¾»$ÊpÁ|É¿ã>™“~—Á¦µ—oØÅàÊv*e>±&Ú«?¤íó´ÜN^âr´áü-†×ŽW£ hS(Kx§ŸÆcº.‡È´=óÅuˆ2igu5°òd·w+ÏJ‘}0Dwo"9'‡ùjFÞüç_9ÚVz„Ššì´²YÚ´É–GîºJi9’V*ÿæ¨véáÙ¥ ™±Ü)–ž±E~N/äˆÃ0ºƒev"pº„|Ì‹Èuµˆ¸Q|JÜ~CÂ’Y¡k#Ïƒß â½È’ëIU˜$½zྸRú'àÜÆøšaÔêç ¯ÃXf癩xÄnülÅyq¼Î'XˆQ†Ñr__ÅG$zücŸÛ‘_ø3‰äyî5(­LÊ@7€9û ÏÔ¿î~€‘7ƒ,ñ¦Ø[[X‡Ïùömàx5ªpz®°À_–ÉG,š<º,Hp5ëBk_Ð\·¿q”㤶#‡À ÌV!’SîoÃh-±ž´!÷š?Ø7P¨®’$ë *}t?ã\KÁbùœ‚·$To4•€nÁ€ ²”ÿ AkwËܯÜ'(Ô·û6`ž(jL;‡U¥ÚÖ€ð/WAz w¦œV¹Žví\dØœ5?Zßp@"›BÓ˜Þ\ÚSÔú´êÊ{¢èVu´~µáfè¦F.K¸ìÏuĘGÝâÆGu‹qxŽ4JÅ9>܇› Ûåù¼Ø š…E çpzɬÎïºôUTnLüR ÙE¢/®Z‚¹GÛ[jOW¢•ÔÈà9"Gpâw£»°VhŒ%úšS¥î§}u"£wø%à74 ÉqÂåxE¨‹ÔØO(Z}Ée]/‹;׃D'ïö>ÞYRVIQ´IÃ>»Hõj­hü=Yù+°|0ÓË é2|V(™‡d3òæ£]vøÞ§^ÁµB·’©ŽM¢mׇ¿šÒ»+×zÝΨü³ÕKõÜ… hvEmi¯¼;­àv5ÆrqתÀ]seúéœU¢(¬¢8‘ŽÁçå¾|@§ž´}šÂêûùL[½¶Æ]×P|5Ä<×»Ç+•Ï'ó{§ÐNo‡Ò‘ÕîUŒ/¥ûâJ˜^o‰2¯ ©«d~ÑE®ÞÕl=ñûs—5ˆŠ››49™[,´Ë³éQ”ðáE|_üÚ EŽÑáÃ&»*Æ#ĉ·¦ Ëá®·€G/Õíp‡ÌÀ$:RQ‰±¿JÐOꆋ.á–-JFŠcÚµÿØÒþ$<ìöמìµèT8ÃÖµîÀT3tr4ñh5®ª™dwËüPA}fºè!ÜlD­th´'PÁöSu}Ì‘Oν‚¯¿b#k¢+:ºmr½QòHo¡å[ˆÀsC^%T÷¼ýX½DI"ÎÆtòm¹v^t$6lè´ñ +š}-÷äC5ë“ Ù(o‹ev[ÂwB.°÷žï¹?& ¬ àY_÷cÉ[P³÷("vBÅmɧ¦»)à‰Cf„¹‘*ÉÈÅf¯u}¥}z¬K9pl¹u³¹Dà²JzÁ÷¼MÛÓeÉÈ/ÈÕ*J6.صØ>W—ãv†Çvq$ãEÁQp HâfÌÀHa€¨£]òãÚfêÀ!ºæ/b4CÒI§¸•“o¹ìäÀ”-ÿÔzUó‹I;%ü>Ü(Tˆ¥b¢pR<–2#A‰éžùîhÌÖhaxe_4.2.4.orig/extra/doc.hxml0000644000175000017500000000102314146064214016157 0ustar andyandy00000000000000--no-output --macro ImportAll.run() --dce no -D doc-gen --each -neko all.n -xml doc/neko.xml --next -js all.js -xml doc/js.xml --next -swf all9.swf -xml doc/flash.xml --swf-version 11.4 --next -php all_php -xml doc/php.xml --next -cpp all_cpp -xml doc/cpp.xml -D HXCPP_MULTI_THREADED --next -java all_java -xml doc/java.xml --next -cs all_cs -D unsafe -xml doc/cs.xml --next -python all_py -xml doc/python.xml --next --interp -xml doc/macro.xml --next -lua all_lua -xml doc/lua.xml --next -hl all_hl -xml doc/hl.xmlhaxe_4.2.4.orig/extra/extract.hxml0000644000175000017500000000074414146064214017075 0ustar andyandy00000000000000# To rebuild Flash externs (quoting ncannasse): # - Remove haxe/std/flash/DIR where DIR is all directories except _std # - Place library.swf (extracted from playerglobal.swc) next to extract.hxml # - Run haxe extract.hxml # - Restore removed haxe/std/flash/DIR directories # - Copy directories from hxclasses/flash to haxe/std/flash, overwriting restored ones --debug --swf-lib library.swf -swf test.swf --swf-version 15 --macro patchTypes("../extra/extract.patch") -D gen-hx-classes haxe_4.2.4.orig/extra/extract.patch0000644000175000017500000014760514146064214017234 0ustar andyandy00000000000000// types patches configuration for playerglobal.swc flash.display.DisplayObject.filters : Array; -flash.accessibility.Accessibility.new @:require(flash10_1) flash.accessibility.ISearchableText @:require(flash10_1) flash.accessibility.ISimpleTextSelection @:require(flash10_1) flash.automation.ActionGenerator @:require(flash10_1) flash.automation.AutomationAction @:require(flash10_1) flash.automation.Configuration @:require(flash10_1) flash.automation.KeyboardAutomationAction @:require(flash10_1) flash.automation.MouseAutomationAction @:require(flash10_1) flash.automation.StageCapture @:require(flash10_1) flash.automation.StageCaptureEvent -flash.desktop.Clipboard.new flash.desktop.Clipboard.formats : Array; flash.desktop.Clipboard.$format : ClipboardFormats; flash.desktop.Clipboard.$transferMode : ClipboardTransferMode; enum flash.desktop.ClipboardFormats; enum flash.desktop.ClipboardTransferMode; enum flash.display.PixelSnapping; enum flash.display.BlendMode; @:require(flash10) flash.desktop.Clipboard @:require(flash10) flash.desktop.ClipboardFormats @:require(flash10) flash.desktop.ClipboardTransferMode flash.display.Bitmap.pixelSnapping : PixelSnapping; flash.display.Bitmap.$pixelSnapping : PixelSnapping; flash.display.BitmapData.$blendMode : BlendMode; flash.display.BitmapData.$redArray : Array; flash.display.BitmapData.$greenArray : Array; flash.display.BitmapData.$blueArray : Array; flash.display.BitmapData.$alphaArray : Array; flash.display.BitmapData.$offsets : Array; @:require(flash10) flash.display.BitmapData.setVector @:require(flash10) flash.display.BitmapData.getVector @:require(flash10) flash.display.BitmapData.histogram @:require(flash10_1) flash.display.Loader.uncaughtErrorEvents; @:require(flash10_1) flash.display.LoaderInfo.isURLInaccessible; @:require(flash10_1) flash.display.LoaderInfo.uncaughtErrorEvents; @:require(flash10_1) flash.display.ColorCorrection @:require(flash10_1) flash.display.ColorCorrectionSupport @:require(flash10_1) flash.display.FocusDirection @:require(flash10_1) flash.display.NativeMenu @:require(flash10_1) flash.display.NativeMenuItem @:require(flash10) flash.display.DisplayObject.blendShader @:require(flash10) flash.display.DisplayObject.rotationX @:require(flash10) flash.display.DisplayObject.rotationY @:require(flash10) flash.display.DisplayObject.rotationZ @:require(flash10) flash.display.DisplayObject.scaleZ @:require(flash10) flash.display.DisplayObject.z @:require(flash10) flash.display.DisplayObject.globalToLocal3D @:require(flash10) flash.display.DisplayObject.local3DToGlobal -flash.display.DisplayObject.new flash.display.DisplayObject.blendMode : BlendMode; flash.display.DisplayObject.opaqueBackground : Null; flash.display.DisplayObjectContainer.getObjectsUnderPoint : Array; @:require(flash10_1) flash.display.Sprite.startTouchDrag; @:require(flash10_1) flash.display.Sprite.stopTouchDrag; @:require(flash10_1) flash.display.Stage.wmodeGPU; enum flash.display.GradientType; enum flash.display.CapsStyle; enum flash.display.JointStyle; enum flash.display.GraphicsPathWinding; enum flash.display.TriangleCulling; enum flash.display.InterpolationMethod; enum flash.display.LineScaleMode; enum flash.display.ShaderParameterType; enum flash.display.ShaderPrecision; enum flash.display.SpreadMethod; enum flash.display.StageAlign; enum flash.display.StageDisplayState; enum flash.display.StageQuality; enum flash.display.StageScaleMode; -flash.display.SWFVersion.new flash.display.Graphics.$type : GradientType; flash.display.Graphics.$colors : Array; flash.display.Graphics.$spreadMethod : SpreadMethod; flash.display.Graphics.$interpolationMethod : InterpolationMethod; flash.display.Graphics.$scaleMode : LineScaleMode; flash.display.Graphics.$caps : CapsStyle; flash.display.Graphics.$joints : JointStyle; flash.display.Graphics.$winding : GraphicsPathWinding; flash.display.Graphics.$culling : TriangleCulling; @:require(flash10) flash.display.Graphics.beginShaderFill @:require(flash10) flash.display.Graphics.copyFrom @:require(flash10) flash.display.Graphics.drawGraphicsData @:require(flash10) flash.display.Graphics.drawPath @:require(flash10) flash.display.Graphics.drawTriangles @:require(flash10) flash.display.Graphics.lineBitmapStyle @:require(flash10) flash.display.Graphics.lineShaderStyle flash.display.GraphicsGradientFill.type : GradientType; flash.display.GraphicsGradientFill.colors : Array; flash.display.GraphicsGradientFill.spreadMethod : SpreadMethod; flash.display.GraphicsGradientFill.interpolationMethod : InterpolationMethod; flash.display.GraphicsGradientFill.alphas : Array; flash.display.GraphicsGradientFill.ratios : Array; flash.display.GraphicsGradientFill.$type : GradientType; flash.display.GraphicsGradientFill.$colors : Array; flash.display.GraphicsGradientFill.$spreadMethod : SpreadMethod; flash.display.GraphicsGradientFill.$interpolationMethod : InterpolationMethod; flash.display.GraphicsGradientFill.$alphas : Array; flash.display.GraphicsGradientFill.$ratios : Array; flash.display.GraphicsGradientFill.$matrix : flash.geom.Matrix; flash.display.GraphicsPath.winding : GraphicsPathWinding; flash.display.GraphicsPath.$winding : GraphicsPathWinding; flash.display.GraphicsStroke.scaleMode : LineScaleMode; flash.display.GraphicsStroke.caps : CapsStyle; flash.display.GraphicsStroke.joints : JointStyle; flash.display.GraphicsStroke.$scaleMode : LineScaleMode; flash.display.GraphicsStroke.$caps : CapsStyle; flash.display.GraphicsStroke.$joints : JointStyle; flash.display.GraphicsTrianglePath.culling : TriangleCulling; flash.display.GraphicsTrianglePath.$culling : TriangleCulling; @:require(flash10) flash.display.Loader.unloadAndStop enum flash.display.ActionScriptVersion; enum flash.display.ColorCorrection; enum flash.display.ColorCorrectionSupport; -flash.display.LoaderInfo.new flash.display.LoaderInfo.parameters : Dynamic; flash.display.LoaderInfo.actionScriptVersion : ActionScriptVersion; -flash.display.MorphShape.new @:require(flash10) flash.display.MovieClip.currentFrameLabel flash.display.MovieClip.currentLabels : Array; flash.display.MovieClip.scenes : Array; flash.display.Scene.labels : Array; flash.display.Scene.$labels : Array; @:require(flash10) flash.display.Shader; flash.display.Shader.precisionHint : ShaderPrecision; -flash.display.ShaderParameter.new flash.display.ShaderParameter.type : ShaderParameterType; -flash.display.Stage.new flash.display.Stage.align : StageAlign; flash.display.Stage.quality : StageQuality; flash.display.Stage.scaleMode : StageScaleMode; flash.display.Stage.colorCorrection : ColorCorrection; flash.display.Stage.colorCorrectionSupport : ColorCorrectionSupport; flash.display.Stage.displayState : StageDisplayState; flash.display.Stage.displayState : StageDisplayState; @:require(flash10) flash.display.Stage.colorCorrection @:require(flash10) flash.display.Stage.colorCorrectionSupport @:require(flash10_1) flash.errors.DRMManagerError @:require(flash10_1) flash.events.AccelerometerEvent @:require(flash10_1) flash.events.DRMAuthenticateEvent @:require(flash10_1) flash.events.DRMAuthenticationCompleteEvent @:require(flash10_1) flash.events.DRMAuthenticationErrorEvent @:require(flash10_1) flash.events.DRMCustomProperties @:require(flash10_1) flash.events.DRMErrorEvent @:require(flash10_1) flash.events.DRMStatusEvent @:require(flash10_1) flash.events.GeolocationEvent @:require(flash10_1) flash.events.GestureEvent @:require(flash10_1) flash.events.GesturePhase @:require(flash10_1) flash.events.PressAndTapGestureEvent @:require(flash10_1) flash.events.TouchEvent @:require(flash10_1) flash.events.TransformGestureEvent @:require(flash10_1) flash.events.UncaughtErrorEvent; @:require(flash10_1) flash.events.UncaughtErrorEvents; @:require(flash10) static flash.events.Event.CLEAR; @:require(flash10) static flash.events.Event.COPY; @:require(flash10) static flash.events.Event.CUT; @:require(flash10) static flash.events.Event.EXIT_FRAME; @:require(flash10) static flash.events.Event.FRAME_CONSTRUCTED; @:require(flash10) static flash.events.Event.PASTE; @:require(flash10) static flash.events.Event.SELECT_ALL; @:require(flash10) flash.events.ContextMenuEvent.isMouseTargetInaccessible @:require(flash10) flash.events.FocusEvent.isRelatedObjectInaccessible @:require(flash10) flash.events.MouseEvent.isRelatedObjectInaccessible flash.events.IEventDispatcher.$listener : Dynamic -> Void; flash.events.EventDispatcher.$listener : Dynamic -> Void; enum flash.events.EventPhase; enum flash.events.GesturePhase; flash.events.Event.eventPhase : EventPhase; flash.events.KeyboardEvent.keyLocation : flash.ui.KeyLocation; flash.events.KeyboardEvent.$keyLocationValue : flash.ui.KeyLocation; flash.events.KeyboardEvent.$keyLocation : flash.ui.KeyLocation; @:require(flash10_1) flash.events.ErrorEvent.errorID; @:require(flash10_1) flash.events.HTTPStatusEvent.responseHeaders; @:require(flash10_1) flash.events.HTTPStatusEvent.responseURL; @:require(flash10_1) static flash.events.HTTPStatusEvent.HTTP_RESPONSE_STATUS; @:require(flash10_1) flash.events.IMEEvent.imeClient; @:require(flash10_1) static flash.events.IMEEvent.IME_START_COMPOSITION; -flash.events.WeakFunctionClosure.new -flash.external.ExternalInterface.new enum flash.filters.BitmapFilterType; enum flash.filters.DisplacementMapFilterMode; flash.filters.BevelFilter.type : BitmapFilterType; flash.filters.BevelFilter.$type : BitmapFilterType; flash.filters.DisplacementMapFilter.mode : DisplacementMapFilterMode; flash.filters.DisplacementMapFilter.$mode : DisplacementMapFilterMode; flash.filters.GradientGlowFilter.type : BitmapFilterType; flash.filters.GradientGlowFilter.$type : BitmapFilterType; enum flash.geom.Orientation3D; flash.geom.Matrix3D.$orientationStyle : Orientation3D; @:require(flash10) flash.geom.Matrix3D; @:require(flash10) flash.geom.Utils3D; @:require(flash10) flash.geom.Vector3D; @:require(flash10) flash.geom.PerspectiveProjection; @:require(flash10) flash.geom.Transform.matrix3D; @:require(flash10) flash.geom.Transform.perspectiveProjection; @:require(flash10) flash.geom.Transform.getRelativeMatrix3D; -flash.geom.Utils3D.new @:require(flash10_1) static flash.media.Camera.isSupported; @:require(flash10_1) static flash.media.Camera._scanHardware; enum flash.media.SoundCodec; flash.media.Microphone.codec : SoundCodec; @:require(flash10) flash.media.Microphone.codec; @:require(flash10) flash.media.Microphone.encodeQuality; @:require(flash10) flash.media.Microphone.framesPerPacket; @:require(flash10_1) flash.media.Microphone.enableVAD; @:require(flash10_1) flash.media.Microphone.noiseSuppressionLevel; @:require(flash10_1) static flash.media.Microphone.isSupported; @:require(flash10) flash.media.Sound.extract; @:require(flash10_1) flash.media.Sound.isURLInaccessible; @:require(flash10) flash.net.FileReference.data; @:require(flash10) flash.net.FileReference.load; @:require(flash10) flash.net.FileReference.save; -flash.media.SoundMixer.new @:require(flash10_1) flash.net.LocalConnection.isPerUser; @:require(flash10_1) static flash.net.LocalConnection.isSupported; flash.net.FileReference.$typeFilter : Array; flash.net.FileReferenceList.fileList : Array; flash.net.FileReferenceList.$typeFilter : Array; @:require(flash10_1) flash.net.GroupSpecifier; @:require(flash10_1) flash.net.NetGroup; @:require(flash10_1) flash.net.NetGroupInfo; @:require(flash10_1) flash.net.NetStreamMulticastInfo; @:require(flash10) flash.net.NetConnection.farID; @:require(flash10) flash.net.NetConnection.farNonce; @:require(flash10) flash.net.NetConnection.maxPeerConnections; @:require(flash10) flash.net.NetConnection.nearID; @:require(flash10) flash.net.NetConnection.nearNonce; @:require(flash10) flash.net.NetConnection.protocol; @:require(flash10) flash.net.NetConnection.unconnectedPeerStreams; @:require(flash10) flash.net.NetStream.farID; @:require(flash10) flash.net.NetStream.farNonce; @:require(flash10) flash.net.NetStream.info; @:require(flash10) flash.net.NetStream.maxPauseBufferTime; @:require(flash10) flash.net.NetStream.nearNonce; @:require(flash10) flash.net.NetStream.peerStreams; @:require(flash10) flash.net.NetStream.onPeerConnect; @:require(flash10) flash.net.NetStream.play2; @:require(flash10) static flash.net.NetStream.CONNECT_TO_FMS; @:require(flash10) static flash.net.NetStream.DIRECT_CONNECTIONS; @:require(flash10_1) flash.net.NetStream.audioReliable; @:require(flash10_1) flash.net.NetStream.audioSampleAccess; @:require(flash10_1) flash.net.NetStream.backBufferLength; @:require(flash10_1) flash.net.NetStream.backBufferTime; @:require(flash10_1) flash.net.NetStream.bufferTimeMax; @:require(flash10_1) flash.net.NetStream.dataReliable; @:require(flash10_1) flash.net.NetStream.inBufferSeek; @:require(flash10_1) flash.net.NetStream.multicastAvailabilitySendToAll; @:require(flash10_1) flash.net.NetStream.multicastAvailabilityUpdatePeriod; @:require(flash10_1) flash.net.NetStream.multicastFetchPeriod; @:require(flash10_1) flash.net.NetStream.multicastInfo; @:require(flash10_1) flash.net.NetStream.multicastPushNeighborLimit; @:require(flash10_1) flash.net.NetStream.multicastRelayMarginDuration; @:require(flash10_1) flash.net.NetStream.multicastWindowDuration; @:require(flash10_1) flash.net.NetStream.videoReliable; @:require(flash10_1) flash.net.NetStream.videoSampleAccess; @:require(flash10_1) flash.net.NetStream.appendBytes; @:require(flash10_1) flash.net.NetStream.appendBytesAction; @:require(flash10_1) flash.net.NetStream.attach; @:require(flash10_1) flash.net.NetStream.step; @:require(flash10_1) flash.net.NetStreamInfo.videoLossRate; @:require(flash10_1) flash.net.NetStreamPlayOptions.offset; @:require(flash10_1) static flash.net.URLRequestMethod.DELETE; @:require(flash10_1) static flash.net.URLRequestMethod.HEAD; @:require(flash10_1) static flash.net.URLRequestMethod.OPTIONS; @:require(flash10_1) static flash.net.URLRequestMethod.PUT; @:require(flash10) flash.net.Socket.timeout; @:require(flash10) flash.net.XMLSocket.timeout; -flash.net.ObjectEncoding.new -flash.net.URLRequestMethod.new enum flash.net.URLLoaderDataFormat; flash.net.Socket.endian : flash.utils.Endian; flash.net.URLLoader.dataFormat : URLLoaderDataFormat; flash.net.URLRequest.requestHeaders : Array; flash.net.URLStream.endian : flash.utils.Endian; enum flash.printing.PrintJobOrientation; flash.printing.PrintJob.orientation : PrintJobOrientation; @:require(flash10_1) static flash.printing.PrintJob.isSupported; -flash.sampler.DeleteObjectSample.new -flash.sampler.NewObjectSample.new -flash.sampler.Sample.new flash.sampler.Sample.stack : Array; -flash.sampler.StackFrame.new @:require(flash10_1) flash.sampler.NewObjectSample.size; @:require(flash10_1) flash.sampler.StackFrame.scriptID; -flash.system.Capabilities.new -flash.system.IME.new -flash.system.FSCommand.new enum flash.system.IMEConversionMode; static flash.system.IME.conversionMode : IMEConversionMode @:require(flash10) flash.system.ApplicationDomain.domainMemory; @:require(flash10) static flash.system.ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH; @:require(flash10) static flash.system.Capabilities.isEmbeddedInAcrobat; @:require(flash10) static flash.system.Capabilities.maxLevelIDC; @:require(flash10_1) static flash.system.Capabilities.cpuArchitecture; @:require(flash10_1) static flash.system.Capabilities.supports32BitProcesses; @:require(flash10_1) static flash.system.Capabilities.supports64BitProcesses; @:require(flash10_1) static flash.system.Capabilities.touchscreenType; static flash.system.Capabilities.touchscreenType : TouchscreenType; enum flash.system.TouchscreenType; @:require(flash10_1) static flash.system.IME.isSupported; @:require(flash10_1) static flash.system.IME.compositionAbandoned; @:require(flash10_1) static flash.system.IME.compositionSelectionChanged; @:require(flash10) flash.system.JPEGLoaderContext; @:require(flash10_1) flash.system.LoaderContext.allowCodeImport; @:require(flash10_1) flash.system.LoaderContext.allowLoadBytesCodeExecution; @:require(flash10_1) static flash.system.Security.APPLICATION; @:require(flash10_1) static flash.system.Security.duplicateSandboxBridgeInputArguments; @:require(flash10_1) static flash.system.Security.duplicateSandboxBridgeOutputArgument; @:require(flash10_1) static flash.system.System.currentTime; @:require(flash10_1) static flash.system.System.freeMemory; @:require(flash10_1) static flash.system.System.preciseStartupTime; @:require(flash10_1) static flash.system.System.privateMemory; @:require(flash10_1) static flash.system.System.totalMemoryNumber; @:require(flash10_1) static flash.system.System.disposeXML; @:require(flash10_1) static flash.system.System.nativeConstructionOnly; enum flash.system.SecurityPanel; -flash.system.Security.new flash.system.Security.$panel : SecurityPanel -flash.system.SecurityDomain.new -flash.system.System.new flash.system.SystemUpdater.$typer : SystemAdapterType; enum flash.text.AntiAliasType; enum flash.text.GridFitType; enum flash.text.FontStyle; enum flash.text.FontType; enum flash.text.TextDisplayMode; enum flash.text.TextFieldType; enum flash.text.TextFieldAutoSize; enum flash.text.TextFormatAlign; enum flash.text.TextFormatDisplay; enum flash.text.TextColorType; flash.text.Font.fontStyle : FontStyle; flash.text.Font.fontType : FontType; static flash.text.Font.enumerateFonts : Array; flash.text.TextField.autoSize : TextFieldAutoSize; flash.text.TextField.antiAliasType : AntiAliasType; flash.text.TextField.gridFitType : GridFitType; flash.text.TextField.type : TextFieldType; flash.text.TextFormat.align : TextFormatAlign; flash.text.TextFormat.blockIndent : Null flash.text.TextFormat.bold : Null; flash.text.TextFormat.bullet : Null; flash.text.TextFormat.color : Null; flash.text.TextFormat.display : TextFormatDisplay; flash.text.TextFormat.indent : Null; flash.text.TextFormat.italic : Null; flash.text.TextFormat.kerning : Null; flash.text.TextFormat.leading : Null; flash.text.TextFormat.leftMargin : Null; flash.text.TextFormat.letterSpacing : Null; flash.text.TextFormat.rightMargin : Null; flash.text.TextFormat.size : Null; flash.text.TextFormat.tabStops : Array; flash.text.TextFormat.underline : Null; flash.text.TextFormat.$size : Null; flash.text.TextFormat.$color : Null; flash.text.TextFormat.$bold : Null; flash.text.TextFormat.$italic : Null; flash.text.TextFormat.$underline : Null; flash.text.TextFormat.$align : TextFormatAlign; flash.text.TextFormat.$leftMargin : Null; flash.text.TextFormat.$rightMargin : Null; flash.text.TextFormat.$indent : Null; flash.text.TextFormat.$leading : Null; @:require(flash10) static flash.text.TextField.isFontCompatible; -flash.text.TextRenderer.new static flash.text.TextRenderer.antiAliasType : AntiAliasType; static flash.text.TextRenderer.displayMode : TextDisplayMode; flash.text.TextRenderer.$fontStyle : FontStyle; flash.text.TextRenderer.$colorType : TextColorType; @:require(flash10_1) static flash.text.engine.FontDescription.isDeviceFontCompatible; @:require(flash10_1) flash.text.engine.SpaceJustifier.maximumSpacing; @:require(flash10_1) flash.text.engine.SpaceJustifier.minimumSpacing; @:require(flash10_1) flash.text.engine.SpaceJustifier.optimumSpacing; @:require(flash10_1) flash.text.engine.TextBlock.recreateTextLine; @:require(flash10_1) flash.text.engine.TextBlock.releaseLineCreationData; @:require(flash10_1) flash.text.engine.TextLine.hasTabs; flash.text.engine.ContentElement.textRotation : TextRotation; flash.text.engine.ContentElement.$textRotation : TextRotation; flash.text.engine.EastAsianJustifier.justificationStyle : JustificationStyle; flash.text.engine.EastAsianJustifier.$justificationStyle : JustificationStyle; flash.text.engine.EastAsianJustifier.$lineJustification : LineJustification; enum flash.text.engine.BreakOpportunity; enum flash.text.engine.CFFHinting; enum flash.text.engine.DigitCase; enum flash.text.engine.DigitWidth; enum flash.text.engine.FontLookup; enum flash.text.engine.FontPosture; enum flash.text.engine.FontWeight; enum flash.text.engine.JustificationStyle; enum flash.text.engine.Kerning; enum flash.text.engine.LigatureLevel; enum flash.text.engine.LineJustification; enum flash.text.engine.RenderingMode; enum flash.text.engine.TabAlignment; enum flash.text.engine.TextBaseline; enum flash.text.engine.TextLineCreationResult; enum flash.text.engine.TextLineValidity; enum flash.text.engine.TextRotation; enum flash.text.engine.TypographicCase; flash.text.engine.ElementFormat.alignmentBaseline : TextBaseline; flash.text.engine.ElementFormat.breakOpportunity : BreakOpportunity; flash.text.engine.ElementFormat.digitCase : DigitCase; flash.text.engine.ElementFormat.digitWidth : DigitWidth; flash.text.engine.ElementFormat.dominantBaseline : TextBaseline; flash.text.engine.ElementFormat.kerning : Kerning; flash.text.engine.ElementFormat.ligatureLevel : LigatureLevel; flash.text.engine.ElementFormat.textRotation : TextRotation; flash.text.engine.ElementFormat.typographicCase : TypographicCase; flash.text.engine.ElementFormat.$alignmentBaseline : TextBaseline; flash.text.engine.ElementFormat.$breakOpportunity : BreakOpportunity; flash.text.engine.ElementFormat.$digitCase : DigitCase; flash.text.engine.ElementFormat.$digitWidth : DigitWidth; flash.text.engine.ElementFormat.$dominantBaseline : TextBaseline; flash.text.engine.ElementFormat.$kerning : Kerning; flash.text.engine.ElementFormat.$ligatureLevel : LigatureLevel; flash.text.engine.ElementFormat.$textRotation : TextRotation; flash.text.engine.ElementFormat.$typographicCase : TypographicCase; flash.text.engine.FontDescription.cffHinting : CFFHinting; flash.text.engine.FontDescription.fontLookup : FontLookup; flash.text.engine.FontDescription.fontPosture : FontPosture; flash.text.engine.FontDescription.fontWeight : FontWeight; flash.text.engine.FontDescription.renderingMode : RenderingMode; flash.text.engine.FontDescription.$cffHinting : CFFHinting; flash.text.engine.FontDescription.$fontLookup : FontLookup; flash.text.engine.FontDescription.$fontPosture : FontPosture; flash.text.engine.FontDescription.$fontWeight : FontWeight; flash.text.engine.FontDescription.$renderingMode : RenderingMode; flash.text.engine.GraphicElement.$textRotation : TextRotation; flash.text.engine.GroupElement.$textRotation : TextRotation; flash.text.engine.SpaceJustifier.$lineJustification : LineJustification; flash.text.engine.TabStop.alignment : TabAlignment; flash.text.engine.TabStop.$alignment : TabAlignment; flash.text.engine.TextBlock.baselineZero : TextBaseline; flash.text.engine.TextBlock.lineRotation : TextRotation; flash.text.engine.TextBlock.textLineCreationResult : TextLineCreationResult; flash.text.engine.TextBlock.$baselineZero : TextBaseline; flash.text.engine.TextBlock.$lineRotation : TextRotation; flash.text.engine.TextBlock.$textLineCreationResult : TextLineCreationResult; flash.text.engine.TextElement.$textRotation : TextRotation; flash.text.engine.TextJustifier.lineJustification : LineJustification; flash.text.engine.TextJustifier.$lineJustification : LineJustification; flash.text.engine.TextLine.baseline : TextBaseline; -flash.trace.Trace.new -static flash.xml.XMLList.length -static flash.xml.XML.length -flash.text.engine.TextElement.text -flash.ui.Keyboard.new -flash.ui.Mouse.new enum flash.ui.MultitouchInputMode; -flash.ui.Multitouch.new flash.ui.Multitouch.inputMode : MultitouchInputMode; @:require(flash10) flash.ui.ContextMenu.clipboardItems; @:require(flash10) flash.ui.ContextMenu.clipboardMenu; @:require(flash10) flash.ui.ContextMenu.link; @:require(flash10_1) static flash.ui.ContextMenu.isSupported; @:require(flash10) static flash.ui.Mouse.cursor; static flash.ui.Mouse.cursor : Dynamic; @:require(flash10_1) static flash.ui.Keyboard.A; @:require(flash10_1) static flash.ui.Keyboard.B; @:require(flash10_1) static flash.ui.Keyboard.C; @:require(flash10_1) static flash.ui.Keyboard.D; @:require(flash10_1) static flash.ui.Keyboard.E; @:require(flash10_1) static flash.ui.Keyboard.F; @:require(flash10_1) static flash.ui.Keyboard.G; @:require(flash10_1) static flash.ui.Keyboard.H; @:require(flash10_1) static flash.ui.Keyboard.I; @:require(flash10_1) static flash.ui.Keyboard.J; @:require(flash10_1) static flash.ui.Keyboard.K; @:require(flash10_1) static flash.ui.Keyboard.L; @:require(flash10_1) static flash.ui.Keyboard.M; @:require(flash10_1) static flash.ui.Keyboard.N; @:require(flash10_1) static flash.ui.Keyboard.O; @:require(flash10_1) static flash.ui.Keyboard.P; @:require(flash10_1) static flash.ui.Keyboard.Q; @:require(flash10_1) static flash.ui.Keyboard.R; @:require(flash10_1) static flash.ui.Keyboard.S; @:require(flash10_1) static flash.ui.Keyboard.T; @:require(flash10_1) static flash.ui.Keyboard.U; @:require(flash10_1) static flash.ui.Keyboard.V; @:require(flash10_1) static flash.ui.Keyboard.W; @:require(flash10_1) static flash.ui.Keyboard.X; @:require(flash10_1) static flash.ui.Keyboard.Y; @:require(flash10_1) static flash.ui.Keyboard.Z; @:require(flash10_1) static flash.ui.Keyboard.ALTERNATE; @:require(flash10_1) static flash.ui.Keyboard.BACKQUOTE; @:require(flash10_1) static flash.ui.Keyboard.BACKSLASH; @:require(flash10_1) static flash.ui.Keyboard.COMMA; @:require(flash10_1) static flash.ui.Keyboard.COMMAND; @:require(flash10_1) static flash.ui.Keyboard.CharCodeStrings; @:require(flash10_1) static flash.ui.Keyboard.EQUAL; @:require(flash10_1) static flash.ui.Keyboard.LEFTBRACKET; @:require(flash10_1) static flash.ui.Keyboard.MINUS; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_0; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_1; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_2; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_3; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_4; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_5; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_6; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_7; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_8; @:require(flash10_1) static flash.ui.Keyboard.NUMBER_9; @:require(flash10_1) static flash.ui.Keyboard.NUMPAD; @:require(flash10_1) static flash.ui.Keyboard.PERIOD; @:require(flash10_1) static flash.ui.Keyboard.QUOTE; @:require(flash10_1) static flash.ui.Keyboard.RIGHTBRACKET; @:require(flash10_1) static flash.ui.Keyboard.SEMICOLON; @:require(flash10_1) static flash.ui.Keyboard.SLASH; @:require(flash10_1) static flash.ui.Keyboard.hasVirtualKeyboard; @:require(flash10_1) static flash.ui.Keyboard.physicalKeyboardType; enum flash.ui.KeyboardType; enum flash.ui.KeyLocation; static flash.ui.Keyboard.physicalKeyboardType : KeyboardType; @:require(flash10_1) flash.ui.Multitouch; static flash.ui.Multitouch.inputMode : MultitouchInputMode; @:require(flash10_1) flash.ui.MultitouchInputMode; @:require(flash10_1) static flash.ui.Keyboard.STRING_BEGIN; @:require(flash10_1) static flash.ui.Keyboard.STRING_BREAK; @:require(flash10_1) static flash.ui.Keyboard.STRING_CLEARDISPLAY; @:require(flash10_1) static flash.ui.Keyboard.STRING_CLEARLINE; @:require(flash10_1) static flash.ui.Keyboard.STRING_DELETE; @:require(flash10_1) static flash.ui.Keyboard.STRING_DELETECHAR; @:require(flash10_1) static flash.ui.Keyboard.STRING_DELETELINE; @:require(flash10_1) static flash.ui.Keyboard.STRING_DOWNARROW; @:require(flash10_1) static flash.ui.Keyboard.STRING_END; @:require(flash10_1) static flash.ui.Keyboard.STRING_EXECUTE; @:require(flash10_1) static flash.ui.Keyboard.STRING_F1; @:require(flash10_1) static flash.ui.Keyboard.STRING_F10; @:require(flash10_1) static flash.ui.Keyboard.STRING_F11; @:require(flash10_1) static flash.ui.Keyboard.STRING_F12; @:require(flash10_1) static flash.ui.Keyboard.STRING_F13; @:require(flash10_1) static flash.ui.Keyboard.STRING_F14; @:require(flash10_1) static flash.ui.Keyboard.STRING_F15; @:require(flash10_1) static flash.ui.Keyboard.STRING_F16; @:require(flash10_1) static flash.ui.Keyboard.STRING_F17; @:require(flash10_1) static flash.ui.Keyboard.STRING_F18; @:require(flash10_1) static flash.ui.Keyboard.STRING_F19; @:require(flash10_1) static flash.ui.Keyboard.STRING_F2; @:require(flash10_1) static flash.ui.Keyboard.STRING_F20; @:require(flash10_1) static flash.ui.Keyboard.STRING_F21; @:require(flash10_1) static flash.ui.Keyboard.STRING_F22; @:require(flash10_1) static flash.ui.Keyboard.STRING_F23; @:require(flash10_1) static flash.ui.Keyboard.STRING_F24; @:require(flash10_1) static flash.ui.Keyboard.STRING_F25; @:require(flash10_1) static flash.ui.Keyboard.STRING_F26; @:require(flash10_1) static flash.ui.Keyboard.STRING_F27; @:require(flash10_1) static flash.ui.Keyboard.STRING_F28; @:require(flash10_1) static flash.ui.Keyboard.STRING_F29; @:require(flash10_1) static flash.ui.Keyboard.STRING_F3; @:require(flash10_1) static flash.ui.Keyboard.STRING_F30; @:require(flash10_1) static flash.ui.Keyboard.STRING_F31; @:require(flash10_1) static flash.ui.Keyboard.STRING_F32; @:require(flash10_1) static flash.ui.Keyboard.STRING_F33; @:require(flash10_1) static flash.ui.Keyboard.STRING_F34; @:require(flash10_1) static flash.ui.Keyboard.STRING_F35; @:require(flash10_1) static flash.ui.Keyboard.STRING_F4; @:require(flash10_1) static flash.ui.Keyboard.STRING_F5; @:require(flash10_1) static flash.ui.Keyboard.STRING_F6; @:require(flash10_1) static flash.ui.Keyboard.STRING_F7; @:require(flash10_1) static flash.ui.Keyboard.STRING_F8; @:require(flash10_1) static flash.ui.Keyboard.STRING_F9; @:require(flash10_1) static flash.ui.Keyboard.STRING_FIND; @:require(flash10_1) static flash.ui.Keyboard.STRING_HELP; @:require(flash10_1) static flash.ui.Keyboard.STRING_HOME; @:require(flash10_1) static flash.ui.Keyboard.STRING_INSERT; @:require(flash10_1) static flash.ui.Keyboard.STRING_INSERTCHAR; @:require(flash10_1) static flash.ui.Keyboard.STRING_INSERTLINE; @:require(flash10_1) static flash.ui.Keyboard.STRING_LEFTARROW; @:require(flash10_1) static flash.ui.Keyboard.STRING_MENU; @:require(flash10_1) static flash.ui.Keyboard.STRING_MODESWITCH; @:require(flash10_1) static flash.ui.Keyboard.STRING_NEXT; @:require(flash10_1) static flash.ui.Keyboard.STRING_PAGEDOWN; @:require(flash10_1) static flash.ui.Keyboard.STRING_PAGEUP; @:require(flash10_1) static flash.ui.Keyboard.STRING_PAUSE; @:require(flash10_1) static flash.ui.Keyboard.STRING_PREV; @:require(flash10_1) static flash.ui.Keyboard.STRING_PRINT; @:require(flash10_1) static flash.ui.Keyboard.STRING_PRINTSCREEN; @:require(flash10_1) static flash.ui.Keyboard.STRING_REDO; @:require(flash10_1) static flash.ui.Keyboard.STRING_RESET; @:require(flash10_1) static flash.ui.Keyboard.STRING_RIGHTARROW; @:require(flash10_1) static flash.ui.Keyboard.STRING_SCROLLLOCK; @:require(flash10_1) static flash.ui.Keyboard.STRING_SELECT; @:require(flash10_1) static flash.ui.Keyboard.STRING_STOP; @:require(flash10_1) static flash.ui.Keyboard.STRING_SYSREQ; @:require(flash10_1) static flash.ui.Keyboard.STRING_SYSTEM; @:require(flash10_1) static flash.ui.Keyboard.STRING_UNDO; @:require(flash10_1) static flash.ui.Keyboard.STRING_UPARROW; @:require(flash10_1) static flash.ui.Keyboard.STRING_USER; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_BEGIN; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_BREAK; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_CLEARDISPLAY; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_CLEARLINE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_DELETE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_DELETECHAR; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_DELETELINE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_DOWNARROW; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_END; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_EXECUTE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F1; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F10; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F11; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F12; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F13; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F14; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F15; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F16; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F17; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F18; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F19; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F2; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F20; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F21; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F22; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F23; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F24; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F25; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F26; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F27; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F28; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F29; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F3; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F30; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F31; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F32; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F33; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F34; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F35; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F4; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F5; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F6; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F7; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F8; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_F9; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_FIND; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_HELP; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_HOME; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_INSERT; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_INSERTCHAR; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_INSERTLINE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_LEFTARROW; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_MENU; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_MODESWITCH; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_NEXT; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PAGEDOWN; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PAGEUP; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PAUSE; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PREV; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PRINT; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_PRINTSCREEN; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_REDO; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_RESET; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_RIGHTARROW; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_SCROLLLOCK; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_SELECT; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_STOP; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_SYSREQ; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_SYSTEM; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_UNDO; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_UPARROW; @:require(flash10_1) static flash.ui.Keyboard.KEYNAME_USER; @:require(flash10_1) static flash.ui.Mouse.supportsCursor; enum flash.utils.Endian; @:native("RegExp") flash.utils.RegExp; -static flash.utils.RegExp.length; flash.utils.ObjectInput.endian : Endian; flash.utils.ObjectOutput.endian : Endian; flash.utils.ByteArray.endian : Endian; flash.utils.IDataInput.endian : Endian; flash.utils.IDataOutput.endian : Endian; @:require(flash10) flash.utils.ByteArray.clear; @:require(flash10) flash.utils.ByteArray.deflate; @:require(flash10) flash.utils.ByteArray.inflate; @:require(flash10) flash.utils.SetIntervalTimer.clearArrayEntry; -flash.utils.Namespace.toString -flash.utils.Namespace.valueOf -static flash.utils.Namespace.length -flash.utils.QName.toString -flash.utils.QName.valueOf -static flash.utils.QName.length enum flash.xml.XMLNodeType; flash.xml.XMLNode.nodeType : XMLNodeType; flash.xml.XMLNode.$type : XMLNodeType; flash.xml.XML.namespace : flash.utils.Namespace; flash.xml.XML.parent : XML; flash.xml.XMLList.namespace : flash.utils.Namespace; flash.xml.XMLList.parent : XML; flash.xml.XMLTag.type : XMLNodeType; enum flash.system.SystemUpdaterType; @:require(flash10_1) flash.system.SystemUpdater; flash.system.SystemUpdater.$type : SystemUpdaterType; @:require(flash10_1) flash.sensors.Accelerometer; @:require(flash10_1) flash.sensors.Geolocation; @:require(flash10_1) flash.globalization.Collator; @:require(flash10_1) flash.globalization.CurrencyFormatter; @:require(flash10_1) flash.globalization.DateTimeFormatter; @:require(flash10_1) flash.globalization.LocaleID; @:require(flash10_1) flash.globalization.StringTools; @:require(flash10_1) flash.globalization.NumberFormatter; @:require(flash10_1) flash.globalization.NumberParseResult; enum flash.globalization.CollatorMode; enum flash.globalization.DateTimeNameContext; enum flash.globalization.DateTimeNameStyle; enum flash.globalization.DateTimeStyle; enum flash.globalization.LastOperationStatus; enum flash.globalization.NationalDigitsType; flash.globalization.Collator.lastOperationStatus : LastOperationStatus; flash.globalization.Collator.$initialMode : CollatorMode; flash.globalization.CurrencyFormatter.lastOperationStatus : LastOperationStatus; flash.globalization.DateTimeFormatter.lastOperationStatus : LastOperationStatus; flash.globalization.DateTimeFormatter.$dateStyle : DateTimeStyle; flash.globalization.DateTimeFormatter.$nameStyle : DateTimeNameStyle; flash.globalization.DateTimeFormatter.$timeStyle : DateTimeStyle; flash.globalization.DateTimeFormatter.$context : DateTimeNameContext; flash.globalization.DateTimeFormatter.getDateStyle : DateTimeStyle; flash.globalization.DateTimeFormatter.getTimeStyle : DateTimeStyle; flash.globalization.DateTimeFormatter.getDateTimePattern : DateTimeStyle; flash.globalization.LocaleID.lastOperationStatus : LastOperationStatus; flash.globalization.NumberFormatter.lastOperationStatus : LastOperationStatus; flash.globalization.NumberFormatter.digitsType : NationalDigitsType; flash.globalization.StringTools.lastOperationStatus : LastOperationStatus; // FP 10.2 @:require(flash10_2) flash.ui.MouseCursorData; @:require(flash10_2) flash.events.StageVideoEvent; @:require(flash10_2) flash.events.VideoEvent; @:require(flash10_2) flash.media.MicrophoneEnhancedMode; @:require(flash10_2) flash.media.MicrophoneEnhancedOptions; @:require(flash10_2) flash.media.StageVideo; @:require(flash10_2) flash.display.Stage.color; @:require(flash10_2) flash.display.Stage.stageVideos; @:require(flash10_2) flash.media.Microphone.enhancedOptions; @:require(flash10_2) static flash.media.Microphone.getEnhancedMicrophone; @:require(flash10_2) flash.system.Capabilities.allowsFullScreen; @:require(flash10_2) static flash.ui.Keyboard.AUDIO; @:require(flash10_2) static flash.ui.Keyboard.BACK; @:require(flash10_2) static flash.ui.Keyboard.BLUE; @:require(flash10_2) static flash.ui.Keyboard.CHANNEL_DOWN; @:require(flash10_2) static flash.ui.Keyboard.CHANNEL_UP; @:require(flash10_2) static flash.ui.Keyboard.DVR; @:require(flash10_2) static flash.ui.Keyboard.EXIT; @:require(flash10_2) static flash.ui.Keyboard.FAST_FORWARD; @:require(flash10_2) static flash.ui.Keyboard.GREEN; @:require(flash10_2) static flash.ui.Keyboard.GUIDE; @:require(flash10_2) static flash.ui.Keyboard.HELP; @:require(flash10_2) static flash.ui.Keyboard.INFO; @:require(flash10_2) static flash.ui.Keyboard.INPUT; @:require(flash10_2) static flash.ui.Keyboard.LAST; @:require(flash10_2) static flash.ui.Keyboard.LIVE; @:require(flash10_2) static flash.ui.Keyboard.MASTER_SHELL; @:require(flash10_2) static flash.ui.Keyboard.MENU; @:require(flash10_2) static flash.ui.Keyboard.NEXT; @:require(flash10_2) static flash.ui.Keyboard.PAUSE; @:require(flash10_2) static flash.ui.Keyboard.PLAY; @:require(flash10_2) static flash.ui.Keyboard.PREVIOUS; @:require(flash10_2) static flash.ui.Keyboard.RECORD; @:require(flash10_2) static flash.ui.Keyboard.RED; @:require(flash10_2) static flash.ui.Keyboard.REWIND; @:require(flash10_2) static flash.ui.Keyboard.SEARCH; @:require(flash10_2) static flash.ui.Keyboard.SETUP; @:require(flash10_2) static flash.ui.Keyboard.SKIP_BACKWARD; @:require(flash10_2) static flash.ui.Keyboard.SKIP_FORWARD; @:require(flash10_2) static flash.ui.Keyboard.STOP; @:require(flash10_2) static flash.ui.Keyboard.SUBTITLE; @:require(flash10_2) static flash.ui.Keyboard.VOD; @:require(flash10_2) static flash.ui.Keyboard.YELLOW; @:require(flash10_2) static flash.ui.Mouse.registerCursor; enum flash.media.MicrophoneEnhancedMode; flash.media.MicrophoneEnhancedOptions.mode : MicrophoneEnhancedMode; enum flash.display.FocusDirection; // FLASH 11 FEATURES -flash.automation.Configuration.new @:require(flash11) flash.display.DisplayObjectContainer.removeChildren; @:require(flash11) flash.display.Graphics.cubicCurveTo; @:require(flash11) flash.display.GraphicsPath.cubicCurveTo; @:require(flash11) flash.display.InteractiveObject.needsSoftKeyboard; @:require(flash11) flash.display.InteractiveObject.softKeyboardInputAreaOfInterest; @:require(flash11) flash.display.InteractiveObject.requestSoftKeyboard; @:require(flash11) flash.display.MovieClip.isPlaying; @:require(flash11) flash.display.Stage.displayContextInfo; @:require(flash11) flash.display.Stage.softKeyboardRect; @:require(flash11) flash.display.Stage.stage3Ds; @:require(flash11) flash.display.Stage3D; -flash.display.Stage.constructor; -flash.display.Stage.hasOwnProperty; -flash.display.Stage.isPrototypeOf; -flash.display.Stage.propertyIsEnumerable; -flash.display.Stage.setPropertyIsEnumerable; -flash.display.Stage.toLocaleString; -flash.display.Stage.valueOf; enum flash.display3D.Context3DBlendFactor; enum flash.display3D.; @:require(flash11) static flash.events.Event.CONTEXT3D_CREATE; @:require(flash11) static flash.events.Event.TEXT_INTERACTION_MODE_CHANGE; @:require(flash11) static flash.events.StageVideoEvent.RENDER_STATUS_AVAILABLE; @:require(flash11) static flash.events.StageVideoEvent.STAGE_VIDEO_STATE; @:require(flash11) flash.geom.Matrix3D.copyColumnFrom; @:require(flash11) flash.geom.Matrix3D.copyColumnTo; @:require(flash11) flash.geom.Matrix3D.copyFrom; @:require(flash11) flash.geom.Matrix3D.copyRawDataFrom; @:require(flash11) flash.geom.Matrix3D.copyRawDataTo; @:require(flash11) flash.geom.Matrix3D.copyRowFrom; @:require(flash11) flash.geom.Matrix3D.copyRowTo; @:require(flash11) flash.geom.Matrix3D.copyToMatrix3D; @:require(flash11) flash.geom.Matrix.copyColumnFrom; @:require(flash11) flash.geom.Matrix.copyColumnTo; @:require(flash11) flash.geom.Matrix.copyFrom; @:require(flash11) flash.geom.Matrix.copyRowFrom; @:require(flash11) flash.geom.Matrix.copyRowTo; @:require(flash11) flash.geom.Matrix.setTo; @:require(flash11) flash.geom.Point.copyFrom; @:require(flash11) flash.geom.Point.setTo; @:require(flash11) flash.geom.Rectangle.copyFrom; @:require(flash11) flash.geom.Rectangle.setTo; @:require(flash11) flash.geom.Vector3D.copyFrom; @:require(flash11) flash.geom.Vector3D.setTo; @:require(flash11) flash.media.Sound.loadCompressedDataFromByteArray; @:require(flash11) flash.media.Sound.loadPCMFromByteArray; @:require(flash11) flash.net.Socket.bytesPending; -flash.display3D.Context3DClearMask.new; enum flash.display3D.Context3DCompareMode; enum flash.display3D.Context3DProgramType; enum flash.display3D.Context3DRenderMode; enum flash.display3D.Context3DStencilAction; enum flash.display3D.Context3DTextureFormat; enum flash.display3D.Context3DTriangleFace; enum flash.display3D.Context3DVertexBufferFormat; -flash.display.Stage3D.new; -flash.display3D.Context3D.new; -flash.display3D.IndexBuffer3D.new; -flash.display3D.Program3D.new; -flash.display3D.VertexBuffer3D.new; -flash.display3D.textures.CubeTexture.new; -flash.display3D.textures.TextureBase.new; -flash.display3D.textures.Texture.new; flash.display3D.Context3D.$sourceFactor : Context3DBlendFactor; flash.display3D.Context3D.$destinationFactor : Context3DBlendFactor; flash.display3D.Context3D.$format : Context3DTextureFormat; flash.display3D.Context3D.$triangleFaceToCull : Context3DTriangleFace; flash.display3D.Context3D.$triangleFace : Context3DTriangleFace; flash.display3D.Context3D.$passCompareMode : Context3DCompareMode; flash.display3D.Context3D.$compareMode : Context3DCompareMode; flash.display3D.Context3D.$programType : Context3DProgramType; flash.display3D.Context3D.$actionOnBothPass : Context3DStencilAction; flash.display3D.Context3D.$actionOnDepthFail : Context3DStencilAction; flash.display3D.Context3D.$actionOnDepthPassStencilFail : Context3DStencilAction; flash.display3D.Context3D.$setVertexBufferAt__format : Context3DVertexBufferFormat; @:require(flash11) flash.net.NetStream.useHardwareDecoder; @:require(flash11) flash.net.NetStream.videoStreamSettings; @:require(flash11) flash.net.SecureSocket; @:require(flash11) flash.net.NetMonitor; @:require(flash11) static flash.system.Capabilities.hasMultiChannelAudio; @:require(flash11) flash.system.LoaderContext.imageDecodingPolicy; @:require(flash11) flash.system.LoaderContext.parameters; @:require(flash11) flash.system.LoaderContext.requestedContentParent; enum flash.system.ImageDecodingPolicy; flash.system.LoaderContext.imageDecodingPolicy : ImageDecodingPolicy; @:require(flash11) static flash.system.Security.pageDomain; @:require(flash11) static flash.system.System.processCPUUsage; @:require(flash11) static flash.system.System.pauseForGCIfCollectionImminent; @:require(flash11) static flash.ui.Mouse.supportsNativeCursor; @:require(flash11) static flash.ui.Mouse.unregisterCursor; -flash.ui.MouseCursor.new; @:require(flash11) flash.utils.CompressionAlgorithm; enum flash.utils.CompressionAlgorithm; @:require(flash11) flash.xml.XML.toJSON; @:require(flash11) flash.xml.XMLList.toJSON; flash.utils.ByteArray.$algorithm : CompressionAlgorithm; @:require(flash11) flash.text.TextField.textInteractionMode; enum flash.text.TextInteractionMode; flash.text.TextField.textInteractionMode : TextInteractionMode; // 11.2 enum flash.display.BitmapCompressColorSpace; @:require(flash11_2) flash.display.BitmapData.compress; @:require(flash11_2) flash.media.Camera.position; @:require(flash11_2) flash.net.NetStream.dispose; @:require(flash11_2) flash.display.StageWorker; @:require(flash11_2) flash.display.Worker; @:require(flash11_8) flash.events.GameInputEvent; @:require(flash11_2) flash.events.ThrottleEvent; flash.events.ThrottleEvent.$type : ThrottleType; enum flash.events.ThrottleType; @:require(flash11_8) flash.ui.GameInput; @:require(flash11_8) flash.ui.GameInputDevice; -flash.ui.GameInput.new; @:require(flash11_2) flash.utils.Telemetry; enum flash.ui.GameInputFinger; enum flash.ui.GameInputHand; enum flash.ui.GameInputControlType; flash.ui.GameInputControl.finger : flash.ui.GameInputFinger; flash.ui.GameInputControl.hand : flash.ui.GameInputHand; flash.ui.GameInputControl.type : flash.ui.GameInputControlType; // 11.2 @:require(flash11_2) flash.display3D.Context3D.setProgramConstantsFromByteArray @:require(flash11_2) flash.display.Stage.mouseLock; @:require(flash11_2) flash.events.MouseEvent.movementX; @:require(flash11_2) flash.events.MouseEvent.movementY; @:require(flash11_2) static flash.events.MouseEvent.CONTEXT_MENU; @:require(flash11_2) static flash.events.MouseEvent.MIDDLE_CLICK; @:require(flash11_2) static flash.events.MouseEvent.MIDDLE_MOUSE_DOWN; @:require(flash11_2) static flash.events.MouseEvent.MIDDLE_MOUSE_UP; @:require(flash11_2) static flash.events.MouseEvent.RIGHT_CLICK; @:require(flash11_2) static flash.events.MouseEvent.RIGHT_MOUSE_DOWN; @:require(flash11_2) static flash.events.MouseEvent.RIGHT_MOUSE_UP; // 11.3 @:require(flash11_3) flash.display.BitmapData.drawWithQuality flash.display.BitmapData.$quality : StageQuality; enum flash.display.BitmapEncodingColorSpace; flash.display.JPEGXREncoderOptions.$colorSpace : BitmapEncodingColorSpace; flash.display.JPEGXREncoderOptions.colorSpace : BitmapEncodingColorSpace; @:require(flash11_3) flash.display.BitmapData.encode @:require(flash11_3) flash.display.Stage.allowsFullScreenInteractive @:require(flash11_3) static flash.events.Event.FRAME_LABEL; @:require(flash11_3) static flash.events.Event.SUSPEND; @:require(flash11_3) static flash.events.FullScreenEvent.FULL_SCREEN_INTERACTIVE_ACCEPTED; @:require(flash11_3) flash.events.FullScreenEvent.interactive; @:require(flash11_3) static flash.events.MouseEvent.RELEASE_OUTSIDE; @:require(flash11_3) flash.net.NetStream.useJitterBuffer; @:require(flash11_3) flash.system.ApplicationDomain.getQualifiedDefinitionNames; @:require(flash11_3) flash.system.SecurityDomain.domainID; @:require(flash11_3) flash.system.ApplicationInstaller; @:require(flash11_3) flash.system.AuthorizedFeatures; @:require(flash11_3) flash.system.AuthorizedFeaturesLoader; @:require(flash11_3) static flash.events.Event.TEXTURE_READY; // 11.4 @:require(flash11_4) flash.display.BitmapData.copyPixelsToByteArray; @:require(flash11_4) flash.concurrent.Mutex; @:require(flash11_4) flash.concurrent.Condition; enum flash.display3D.Context3DProfile; flash.display.Stage3D.$profile : flash.display3D.Context3DProfile; @:require(flash11_4) flash.display.LoaderInfo.childSandboxBridge; @:require(flash11_4) flash.display.LoaderInfo.parentSandboxBridge; @:require(flash11_4) flash.display.Stage.contentsScaleFactor; @:require(flash11_4) flash.media.Camera.copyToByteArray; @:require(flash11_4) flash.media.Camera.copyToVector; @:require(flash11_4) flash.media.Camera.drawToBitmapData; @:require(flash11_4) flash.media.StageVideo.attachCamera; @:require(flash11_4) flash.net.URLStream.diskCacheEnabled; @:require(flash11_4) flash.net.URLStream.length; @:require(flash11_4) flash.net.URLStream.position; @:require(flash11_4) flash.net.URLStream.stop; @:require(flash11_4) flash.system.AuthorizedFeatures.enableDiskCache; @:require(flash11_4) flash.system.AuthorizedFeatures.isFeatureEnabled; @:require(flash11_4) flash.system.AuthorizedFeatures.isNegativeToken; @:require(flash11_4) flash.system.AuthorizedFeaturesLoader.makeGlobal; @:require(flash11_4) flash.utils.ByteArray.shareable; @:require(flash11_4) flash.utils.ByteArray.atomicCompareAndSwapIntAt; @:require(flash11_4) flash.utils.ByteArray.atomicCompareAndSwapLength; //not supported @:require(flash11_4) flash.utils.CompressionAlgorithm.LZMA; @:require(flash11_4) flash.system.Worker; @:require(flash11_4) flash.system.WorkerDomain; @:require(flash11_4) flash.system.MessageChannel; -flash.system.Worker.new; -flash.system.MessageChannel.new; flash.system.Worker.state : WorkerState; flash.system.MessageChannel.state : MessageChannelState; enum flash.system.WorkerState; enum flash.system.MessageChannelState; // --- 11.6 API enum flash.display3D.Context3DMipFilter enum flash.display3D.Context3DTextureFilter enum flash.display3D.Context3DWrapMode enum flash.system.ApplicationInstallerMode @:require(flash11_6) flash.display3D.Context3D.setSamplerStateAt flash.display3D.Context3D.$wrap : Context3DWrapMode; flash.display3D.Context3D.$filter : Context3DTextureFilter; flash.display3D.Context3D.$mipfilter : Context3DMipFilter; -flash.display.DisplayObject.metaData @:require(flash11_6) flash.display.Graphics.readGraphicsData @:require(flash11_7) flash.media.StageVideo.attachAVStream; @:require(flash11_7) static flash.net.SharedObject.preventBackup; @:require(flash11_7) flash.system.AuthorizedFeatures.enableHLSPlayback; @:require(flash11_7) flash.system.AuthorizedFeaturesLoader.loadAuthorizedFeaturesFromData; // requires com.adobe.tvsdk.mediacore.MediaPlayer which we don't include flash.system.AuthorizedFeatures.$enableMediaPlayerHLSPlayback__player : Dynamic; @:require(flash11_8) flash.display.DisplayObjectContainer.stopAllMovieClips @:require(flash11_8) flash.display3D.Context3D.createRectangleTexture @:require(flash12) flash.display.Stage3D.requestContext3DMatchingProfiles @:require(flash12) flash.display3D.Context3D.profile flash.display3D.Context3D.$bufferUsage : Context3DBufferUsage enum flash.display3D.Context3DBufferUsage @:native("flash.profiler.Telemetry") flash.utils.Telemetry @:require(flash12) flash.display3D.Context3DBufferUsage haxe_4.2.4.orig/extra/github-actions/Main.hx0000644000175000017500000000244414146064214020675 0ustar andyandy00000000000000package; import sys.FileSystem; import sys.io.File; import haxe.io.Path; using StringTools; class Main { static final matchImport = ~/^([ \t]*)@import (.+)$/gm; static final matchRunnable = ~/^([ \t]*)jobs:/gm; static function main():Void { final folder = FileSystem.absolutePath("."); final outFolder = "../../.github"; iterFolderItems(folder, (dir, name) -> { final ext = Path.extension(name); if (ext != "yaml" && ext != "yml") return; final data = File.getContent('$dir/$name'); var newData = matchImport.map(data, reg -> { final spaces = reg.matched(1); final path = reg.matched(2); final template = File.getContent('./$path'); final lines = template.split("\n"); for (i in 0...lines.length) lines[i] = spaces + lines[i]; lines.join("\n"); }); if (!matchRunnable.match(newData)) return; final first = "# DO NOT EDIT. Generated from /extra/github-actions\n"; newData = first + newData; final relativeDir = dir.replace(folder, ""); File.saveContent('$outFolder$relativeDir/$name', newData); }); } static function iterFolderItems(dir:String, func:(dir:String, name:String)->Void):Void { for (name in FileSystem.readDirectory(dir)) { if (FileSystem.isDirectory(name)) iterFolderItems('$dir/$name', func); func(dir, name); } } } haxe_4.2.4.orig/extra/github-actions/build-linux.yml0000644000175000017500000000315614146064214022430 0ustar andyandy00000000000000- name: Install dependencies run: | set -ex sudo add-apt-repository ppa:avsm/ppa -y # provides OPAM 2 sudo add-apt-repository ppa:haxe/ocaml -y # provides newer version of mbedtls sudo apt-get update -qqy sudo apt-get install -qqy ocaml-nox camlp5 opam libpcre3-dev zlib1g-dev libgtk2.0-dev libmbedtls-dev ninja-build libstring-shellquote-perl - name: Install OCaml libraries run: | set -ex opam init # --disable-sandboxing opam update opam pin add haxe . --no-action opam install haxe --deps-only --assume-depexts opam list ocamlopt -v - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} run: echo "ADD_REVISION=1" >> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`nproc` STATICLINK=1 haxe opam config exec -- make -s haxelib make -s package_unix ls -l out ldd -v ./haxe ldd -v ./haxelib # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Build xmldoc run: | set -ex make -s xmldoc cat >extra/doc/info.json <> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`sysctl -n hw.ncpu` STATICLINK=1 "LIB_PARAMS=/usr/local/lib/libz.a /usr/local/lib/libpcre.a /usr/local/lib/libmbedtls.a /usr/local/lib/libmbedcrypto.a /usr/local/lib/libmbedx509.a -cclib '-framework Security -framework CoreFoundation'" haxe opam config exec -- make -s haxelib make -s package_unix package_installer_mac ls -l out otool -L ./haxe otool -L ./haxelib - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: macBinaries path: out haxe_4.2.4.orig/extra/github-actions/build-windows.yml0000644000175000017500000000723614146064214022766 0ustar andyandy00000000000000- name: choco install nsis uses: nick-invision/retry@v1 with: timeout_minutes: 10 max_attempts: 10 command: choco install --no-progress nsis.portable --version 3.02 -y - name: choco install things shell: pwsh run: choco install --no-progress curl wget 7zip.portable -y - name: Prepend Chocolatey path shell: pwsh run: Write-Host "::add-path::C:\ProgramData\chocolatey\bin" - name: Install OCaml and OCaml libraries shell: pwsh run: | Set-PSDebug -Trace 1 curl.exe -fsSL -o cygwin-setup.exe --retry 3 $($env:CYGWIN_SETUP) Start-Process -FilePath "cygwin-setup.exe" -ArgumentList "-B -q -R $($env:CYG_ROOT) -l C:/tmp -s $($env:CYG_MIRROR) -P default -P make -P git -P zlib-devel -P rsync -P patch -P diffutils -P curl -P unzip -P tar -P m4 -P perl -P libpcre-devel -P mbedtls-devel -P mingw64-$($env:MINGW_ARCH)-zlib -P mingw64-$($env:MINGW_ARCH)-gcc-core -P mingw64-$($env:MINGW_ARCH)-pcre" -Wait curl.exe -fsSL -o "opam.tar.xz" --retry 3 https://github.com/fdopen/opam-repository-mingw/releases/download/0.0.0.2/opam$($env:ARCH).tar.xz curl.exe -fsSL -o "libmbedtls.tar.xz" --retry 3 https://github.com/Simn/mingw64-mbedtls/releases/download/2.16.3/mingw64-$($env:MINGW_ARCH)-mbedtls-2.16.3-1.tar.xz & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'curl -L https://cpanmin.us | perl - App::cpanminus') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm IPC::System::Simple module') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cpanm String::ShellQuote') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'echo "$OLDPWD"') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -C / -xvf libmbedtls.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && tar -xf opam.tar.xz') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && bash opam${ARCH}/install.sh') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam init mingw "https://github.com/fdopen/opam-repository-mingw.git#opam2" --comp 4.07.0+mingw${ARCH}c --switch 4.07.0+mingw${ARCH}c --auto-setup --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam update --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam pin add haxe . --kind=path --no-action --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam pin add ctypes 0.17.1 --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam install haxe --deps-only --yes 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'opam list') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'ocamlopt -v') - name: Expose mingw dll files shell: pwsh run: Write-Host "::add-path::${env:CYG_ROOT}/usr/$($env:MINGW_ARCH)-w64-mingw32/sys-root/mingw/bin" - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} shell: pwsh run: echo "ADD_REVISION=1" >> $Env:GITHUB_ENV - name: Build Haxe shell: pwsh run: | Set-PSDebug -Trace 1 & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win -j`nproc` haxe 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -s -f Makefile.win haxelib 2>&1') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && opam config exec -- make -f Makefile.win echo_package_files package_bin package_installer_win package_choco 2>&1') dir out & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxe.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && cygcheck ./haxelib.exe') & "$($env:CYG_ROOT)/bin/bash.exe" @('-lc', 'cd "$OLDPWD" && ls ./out') - name: Upload artifact uses: actions/upload-artifact@v1.0.0 with: name: win${{env.ARCH}}Binaries path: out haxe_4.2.4.orig/extra/github-actions/build.hxml0000644000175000017500000000002514146064214021432 0ustar andyandy00000000000000--main Main --interp haxe_4.2.4.orig/extra/github-actions/install-neko.yml0000644000175000017500000000230114146064214022563 0ustar andyandy00000000000000- name: Install Neko using snapshot from S3 (Unix) if: ${{ !startsWith(env.PLATFORM, 'windows') }} run: | set -ex curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP NEKOPATH=`echo $RUNNER_TEMP/neko-*-*` sudo mkdir -p /usr/local/bin sudo mkdir -p /usr/local/lib/neko sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/ sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/ sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/ echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV - name: Install Neko using snapshot from S3 (Windows) if: ${{ startsWith(env.PLATFORM, 'windows') }} shell: pwsh run: | Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-* echo "$NEKOPATH" >> $env:GITHUB_PATH echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV - name: Print Neko version run: neko -version 2>&1 haxe_4.2.4.orig/extra/github-actions/test-linux.yml0000644000175000017500000000247014146064214022306 0ustar andyandy00000000000000- name: Setup Haxe run: | # mkdir ./linuxBinaries # curl -sSL https://build.haxe.org/builds/haxe/linux64/haxe_latest.tar.gz -o ./linuxBinaries/haxe_bin.tar.gz sudo apt install -qqy libmbedtls-dev set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Print Haxe version run: haxe -version - name: Setup haxelib run: | set -ex mkdir ~/haxelib haxelib setup ~/haxelib - name: Install apt packages if: matrix.APT_PACKAGES run: | set -ex sudo apt update -qqy sudo apt install -qqy ${{matrix.APT_PACKAGES}} # - name: Flash setup # if: matrix.target == 'flash9' # run: export DISPLAY=:99.0 - name: Test if: success() && !(matrix.SAUCE && matrix.SAUCE_ACCESS_KEY) run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests - name: Test (with SauceLabs) if: matrix.target == 'js' && success() && matrix.SAUCE && matrix.SAUCE_ACCESS_KEY run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests env: SAUCE_ACCESS_KEY: matrix.SAUCE_ACCESS_KEY haxe_4.2.4.orig/extra/github-actions/test-mac.yml0000644000175000017500000000164214146064214021707 0ustar andyandy00000000000000- name: Setup Haxe run: | # mkdir ./macBinaries # curl -sSL https://build.haxe.org/builds/haxe/mac/haxe_latest.tar.gz -o ./macBinaries/haxe_bin.tar.gz set -ex tar -xf macBinaries/*_bin.tar.gz -C macBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/macBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/macBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/macBinaries/std /usr/local/share/haxe/std - name: Print Haxe version run: haxe -version - name: Setup haxelib run: | set -ex mkdir ~/haxelib haxelib setup ~/haxelib - name: Install homebrew packages if: matrix.BREW_PACKAGES run: brew install ${{matrix.BREW_PACKAGES}} - name: Test run: | # disable invalid Unicode filenames on APFS echo "" > sys/compile-fs.hxml haxe RunCi.hxml working-directory: ${{github.workspace}}/tests haxe_4.2.4.orig/extra/github-actions/test-windows.yml0000644000175000017500000000250114146064214022634 0ustar andyandy00000000000000# - name: Quick test # shell: pwsh # run: | # $DOWNLOADDIR="./win$($env:ARCH)Binaries" # new-item -Name $DOWNLOADDIR -ItemType directory # Invoke-WebRequest https://build.haxe.org/builds/haxe/$env:PLATFORM/haxe_latest.zip -OutFile $DOWNLOADDIR/haxe_bin.zip - name: Setup Haxe shell: pwsh run: | $DOWNLOADDIR="./win$($env:ARCH)Binaries" Expand-Archive $DOWNLOADDIR/*_bin.zip -DestinationPath $DOWNLOADDIR Set-PSDebug -Trace 1 $HAXEPATH = Get-ChildItem $DOWNLOADDIR/haxe_*_* -Directory Write-Host "::add-path::$HAXEPATH" Write-Host "::set-env name=HAXELIB_ROOT::$HAXEPATH\lib" - name: Print Haxe version shell: pwsh run: haxe -version - name: "Make Python 3 be available as python3 in the cmdline" shell: pwsh run: | Set-PSDebug -Trace 1 $pypath = python -c "import sys; print(sys.executable)" $py3path = $pypath.replace("python.exe","python3.exe") cmd /c mklink $py3path $pypath python3 -V - name: Install hererocks if: matrix.target == 'lua' shell: cmd run: | pip install hererocks hererocks lua53 -l5.3 -rlatest call lua53/bin/activate - name: Setup haxelib shell: pwsh run: | mkdir "$env:HAXELIB_ROOT" haxelib setup "$env:HAXELIB_ROOT" - name: Test shell: pwsh run: haxe RunCi.hxml working-directory: ${{github.workspace}}/tests haxe_4.2.4.orig/extra/github-actions/workflows/main.yml0000644000175000017500000002464214146064214023160 0ustar andyandy00000000000000# TODO: support skip ci (https://github.community/t/github-actions-does-not-respect-skip-ci/17325/8) name: CI on: [push, pull_request] jobs: cancel: name: "Cancel previous runs" runs-on: ubuntu-18.04 timeout-minutes: 3 steps: - uses: styfle/cancel-workflow-action@0.3.1 with: workflow_id: 1447568 access_token: ${{ github.token }} windows64-build: runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 OPAMYES: 1 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ ARCH: 64 MINGW_ARCH: x86_64 CYGWIN_SETUP: https://cygwin.com/setup-x86_64.exe CYG_ROOT: C:/cygwin64 steps: - uses: actions/checkout@main with: submodules: recursive @import install-neko.yml @import build-windows.yml windows-build: runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows OPAMYES: 1 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ ARCH: 32 MINGW_ARCH: i686 CYGWIN_SETUP: https://cygwin.com/setup-x86.exe CYG_ROOT: C:/cygwin steps: - uses: actions/checkout@main with: submodules: recursive @import install-neko.yml @import build-windows.yml linux-build: runs-on: ubuntu-18.04 env: PLATFORM: linux64 OPAMYES: 1 steps: - uses: actions/checkout@main with: submodules: recursive @import install-neko.yml @import build-linux.yml mac-build: runs-on: macos-latest env: PLATFORM: mac OPAMYES: 1 MACOSX_DEPLOYMENT_TARGET: 10.13 steps: - uses: actions/checkout@main with: submodules: recursive @import install-neko.yml @import build-mac.yml windows64-test: needs: windows64-build runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache ARCH: 64 strategy: fail-fast: false matrix: # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024 target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, neko] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: win${{env.ARCH}}Binaries @import install-neko.yml @import test-windows.yml windows-test: needs: windows-build runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache ARCH: 32 strategy: fail-fast: false matrix: # TODO jvm: https://github.com/HaxeFoundation/haxe/issues/8601 # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/5024 target: [macro, js, hl, cpp, java, cs, php, python, neko] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: win${{env.ARCH}}Binaries @import install-neko.yml @import test-windows.yml linux-test: needs: linux-build runs-on: ubuntu-18.04 env: PLATFORM: linux64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache strategy: fail-fast: false matrix: target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9 include: - target: js # SAUCE: 1 # SAUCE_TUNNEL_ID: 'linux-test' # SAUCE_BUILD: '${{env.GITHUB_RUN_NUMBER}}' # $(Build.BuildNumber) - target: hl APT_PACKAGES: cmake ninja-build libturbojpeg-dev - target: cpp APT_PACKAGES: gcc-multilib g++-multilib - target: lua APT_PACKAGES: ncurses-dev # - target: flash9 # APT_PACKAGES: libglib2.0-0 libfreetype6 xvfb steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: linuxBinaries @import install-neko.yml @import test-linux.yml mac-test: needs: mac-build runs-on: macos-latest env: PLATFORM: mac TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache strategy: fail-fast: false matrix: target: [macro, js, hl, cpp, 'java,jvm', cs, php, python, lua, neko] #flash9 include: - target: hl BREW_PACKAGES: ninja steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v1 with: name: macBinaries @import install-neko.yml @import test-mac.yml deploy: if: github.event_name != 'pull_request' needs: [linux-test, mac-test, windows-test, windows64-test] runs-on: ubuntu-18.04 steps: # this is only needed for to get `COMMIT_DATE`... # maybe https://github.community/t/expose-commit-timestamp-in-the-github-context-data/16460/3 # would be faster - name: Checkout the repository uses: actions/checkout@main - name: Download build artifacts uses: actions/download-artifact@v2 - name: Install awscli run: | set -ex sudo apt-get update -qqy sudo apt-get install -qqy awscli # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - name: Upload binaries shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} run: | set -ex COMMIT_HASH_SHORT=${GITHUB_SHA:0:7} COMMIT_DATE=`TZ=UTC git show --quiet --date='format-local:%Y-%m-%d' --format="%cd"` FILE_NAME=haxe_${COMMIT_DATE}_${{ steps.extract_branch.outputs.branch }}_${COMMIT_HASH_SHORT} aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/${FILE_NAME}.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/${FILE_NAME}.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/${FILE_NAME}.zip aws s3 cp win64Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows64-choco/ aws s3 cp win32Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows/${FILE_NAME}.zip aws s3 cp win32Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows-installer/${FILE_NAME}.zip aws s3 cp win32Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows-choco/ - name: Update "latest" if: github.ref == 'refs/heads/development' shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} run: | set -ex aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/haxe_latest.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/haxe_latest.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/haxe_latest.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/haxe_latest.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/haxe_latest.zip aws s3 cp win32Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows/haxe_latest.zip aws s3 cp win32Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows-installer/haxe_latest.zip # Chocolatey packages have to be named with version number, # so let's use web redirection to keep the original file name. [[ "$HXBUILDS_S3ADDR" =~ s3://([^/]+)(.*) ]] && HXBUILDS_S3BUCKET="${BASH_REMATCH[1]}" && HXBUILDS_S3PATH="${BASH_REMATCH[2]}" [[ `echo win64Binaries/*.nupkg` =~ win64Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}" aws s3 cp ${HXBUILDS_S3ADDR}/haxe/windows64-choco/${FILE_NAME} ${HXBUILDS_S3ADDR}/haxe/windows64-choco/haxe_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3PATH}/haxe/windows64-choco/${FILE_NAME}" [[ `echo win32Binaries/*.nupkg` =~ win32Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}" aws s3 cp ${HXBUILDS_S3ADDR}/haxe/windows-choco/${FILE_NAME} ${HXBUILDS_S3ADDR}/haxe/windows-choco/haxe_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3PATH}/haxe/windows-choco/${FILE_NAME}" deploy_apidoc: if: github.event_name != 'pull_request' # TODO: also only when `GHP_REMOTE` is present needs: [linux-test, mac-test, windows-test, windows64-test] runs-on: ubuntu-18.04 steps: - name: Download Haxe uses: actions/download-artifact@v2 with: name: linuxBinaries path: linuxBinaries - name: Setup Haxe run: | set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Download xmldoc artifact uses: actions/download-artifact@v2 with: name: xmldoc path: xmldoc - name: Deploy to api.haxe.org env: GHP_EMAIL: haxe-ci@onthewings.net GHP_USERNAME: Haxe CI Bot GHP_REMOTE: ${{ secrets.GHP_REMOTE }} run: | set -ex LOCAL="`pwd`/extra/api.haxe.org" git clone "${GHP_REMOTE}" "${LOCAL}" haxe --cwd "${LOCAL}" --run ImportXml "`pwd`/xmldoc" haxe_4.2.4.orig/extra/haxeci_sec.gpg.enc0000644000175000017500000001472014146064214020066 0ustar andyandy00000000000000Salted__gޝ¤dU µÅC—á” ƒ%¼¢™2ªPüÑvm!/“wè=v»ÈÊøS™%pÚ–s-PÔ§a–¯oÒÝc=w1æNNZ¹È\d‹p„åÓ/ËŸLж³“µ? Œ’Ãb3À†d>ÑÈ5mÝr•îߢW›'#°—äî™Tiô’zÏÈÁT0lwÑ š‚ä#†ªIïÿžŽò DšÜEÛ¿EXÞ#ì(E$Ùi$on…W™ë;•N¿GW©Eã 2ÎŽ«£­mÖ¥éœ.µ²»ƒ²V5æ=³Ý&­píH­3#¥ü&÷¾Y žÁèë *ÿwæ%Ã3ÿþÅÀÅÚ­À $ä „úîî'ø>êh¿`ÀMOJꄽ©…ׯóÁ÷·¸áŸ{²Wõ›Èª3KNÆ£áiæŽúçœÀ…ö5ü”˜ùÓ(Ì´Ö&É$úUºŒò⸾ÖÜÿåî5¬à<<_JÌåE¹…dFöÄÿ€¾,MЙP0Ž|HÅ<ñÉ …%––ò:AKz¼#6RI„ÆÊS¹7üeçÁÄ °¢¡âó¾l=ÇzÉy³øï˜Vƒ*èÁ†²(+ñ2HaÝm ›tç£~¼Ä^’MúiÃ{w [(vÃîÙ‡_7ž½Õ!MÑ\âV‚&)]ŽÛŠüT‡?só6 °½n-ÀùÜ™ágç5 ª öâÁm#2UOóÃì%½/òZb£ÀÍ´8…9s7lÉYÙH³Ÿ²ð§Ñ“jfÉ9 ¿ßz”ã© ¹}ˇ: m9V ìÕ>'Hµó­MTW<ú‘Qn*îlrf—°º&È­ÕœëÑf¼Ïg²“ÏQ¢*Xà®"羦KbµÜV¹ÉªÒ†–ûŽHøƒ± “ñ —Æï?›)Ð/3‹˜ ‚;ËEC™öRqëÉé7sRĈ6™´z—±Bž&Dýêd°‡¶ĨºVpî7S’7.p?¾º?ŸÝé¾"XdS8^P»-G”v1>ÉÛôñ¯Yøpº}ýÉ!8l-aÅç H ÂIv qKä˜içLýœŸÒžÄCrÅ ¡ðL—ÕŒ0ìÜÀƽmµ$²¹EIžD!@ª'¿§ç<&¤^pÐþ£€} ­WÓå!¿jlå84·DÚ‰‚¯°}’fû²ƒ7H“ €kië]ž"3íU+ùå>ãâ€&trãtøêfàIG8%!:Ù:ƒÔôÂWºD6¸áØØÐxÖ<Æ1¢I —}bD­Û4(»îÛÉWÕµŽÂ¿½Ú}‘ÂÇõ¬©×ùõ÷ôb`׏д'Œ÷mÉî½Û4pŸ€ÄFkÀ“½önx°nqõ|ļziëêWxo 9n¬%h*f˜wOú$6Óó¸LDb‹ëUÉAZ™ì»˜\Ü|šÔ½v& ìæÙÛŠT¿²h¯>á†Á ;}´Éï'–åà­÷0ê߈aÁh@ó™>.Ÿ–-M ÉOظ*}JÖ)(¿óqkxë&ïZÄ÷QZ= K_L÷ÍTÒQŽ¡»®YF%¢` ·ExŽ6+.cU,ÍìÊxç'n!„7è9zi!ÒýþNÔšÙþö°‰’˜¢³=+¹/W‡Ç¹*]cÀîR)F¼%?Zf³baOçá›°Osgž¬e7û=Š3,’>½Z`6p°UØÅÀù™k÷bÈú¸Fo‹C_¬Mpb ¬&,W²ÖÖ¾ˆÊóàt¥ f1èÌ ÍSå–óßbN: ‹8O«rÆC àD&ñ-B¤!He ¢Ìs­ß"¾3ó~+¼Ç€8¤RSs}.ÀóupZ2=8°?ìÚ¬&[:;±›ÆXVü^µ¦²LIßl×ÅÁT\QÚàÖèÁN)PX%-[5nºÝÜÅûË.»°!¶ÌQ¾£Š“°*ªj)¤òWö§!·HÞìßðÅÄòÜ…‘žY±ëdh›ìW÷ÿªJd|?0o*wD$ýÅçž™8¦šÏþ7kœPRzב€H¬ÔÜ{gvèEÙ,1w8ùY®¶öO’ÀÇY–u—'v\»˜Ã»sÿè,6ì8%{²×"sYY±I™¼W†Re…f;{QűcÎÿ ÊÃx¦Ñ.TD‡íR\ò©1@Ž*eH‡x~|JÅép/¶ Úªnž¤B|Wî–é³Ñq eß…'l³m(/‰c©âIð™%Ð0￘±´+Ï4kIFZé.¿ f4 IöÄÔŠº¨¤Î²ÌÆú%ZiOã©züÊÏ©ËA¡“]ðâl⢞NˆáŽ»šØfнÅbàÐ=»÷ó2ò&?¡Ã?bt«âŠ$9¤ù¢OMê;u£4‹ÃÞZájJm©Ùm’Ôòóö€HÝ‘AÀèwPƒÂÂMøOûl8ÏC( ½ÑÝ|®l@I\‘ª—y¡T´ƒaº¦z§ÉÍ(‰²Q)*<2YYÍ™#bàû?QK’xéÇÊ{ŸšŽÙ¼ÅC‹†s¿e0-ýÙ‘¢™ñãs*õ±WÀØÇ_E_A Æ^+\ô@ñºÒM­ÙöCø‹|¹Œir6Ö‡¨çÒ†-ö¿F‘§áL-»áõ×¼§s²·†ë4ˆ ñÛè³´Ò;L¹ÂhײKÿ6HÔ&àì;¬g®ƒ€Ãè)À‚£}5( E΂f9uEPYµn@Ϥüç7!R ›7‹„„?Uëllh\шêÍžS¬´&.¼ÛºÑûEµq¢ â‡úG ÞÍäv éÛú1 ßÓ¨£qˆ†ÌüÁ£Ê¡¾á:se9˜‘aÀ‘Þ;3çgÑM5 ‘÷êÖýIü–=y¤~Û¦Äb rÆË’»9Só KñÇ8‘û›¿gJÑ\Bó\þ½Ü• ÁÝb£—§S¶{²9,wë’z“o!s&GQ·ÞCÜõHè<É’¤Õ[K§;¢o207à; Úò‰n|5YCH`Z¿G(â<¢­’r€gl®+’íÃgmY4z—Åÿ‚ÆÃž­\f¤*[ßí§Ù|ñ·ÄcpK @ìK™öçÀé?ǶaywLŒf·Â&ñãx1|Ó0‹NTèÛŸ3sÙ[+L`']dk‚†G©lð­&ƒÖ9çTG‹7>öN(÷ß„â~Qµ¦ªyŒ™¿rõ©i5¾êµkq·ßÈ •˜Ä| ÝêNï[)à#RjæeǼ¡ …låõÜä~~ód銎Ñ;ïL7ðù„¶b ÚÒÂ:'f Mpà$Vê.œÉãR’ª†ÿâðåéȤU¨QÈÎWUqÃ;qëenf„·A)ÂÖ« 1ã)FS`øT*Kƒ6 î»êÜwº„œŠÅb¦ˆ…ͱÕXUI–jžlª½ÒUy¤'ÿ&tüYÛûÍ:ÞŒ ,?á.ƒÂ}ø—¨Ñ¶Þ…%‹åÛ“X:3ÏW|ÎÕ÷³Qÿ£/o[¦m$ûÔ²T–âwíà,Û+µéòRUà{«PZHbÝBŸ£ô[¬Ž l=°ÛŸNSǵ‡1O iUEgö¹¬¬œÙÚnë;]S¬×”z²1èQYa[UîÛ„NæûfùHßmCÀÔtxGè߸sYÍ({ašq+úœÉç5çãTG][s×; ÎhWÍeƒjÞ#Îø¼ùéQÉ‘ãŽ×°¨µ¿9éÌoÀÎãr‰8—f÷s…ÿý>jûÿäY%a3+Q¿ ¾¯¬Ò\Æ/Úx:cœmÇÖѦŒ öÔ¼ÕA±\Ã|Â÷òáeO±²Ÿ¾¿þH9–kCÆÆD*Ò(ÿøôá«?þïZe±¼£Ob`Ò~Ýð±,¢Ið Ñæ'Áb´íŸÌbl9WÂ!e/=ƒÉìÈq½„ÿö±ñ2*'”@37XÀ+ÅÝ»¬xÁq¡ã+Ú^c¼]´À¨··)Båî6Rθž4€n tÖjó­4 „Þ_©LÈo ¶IòØ&*Ó’—8¾$spöv 3T41kw~K¡>‘8÷‚® Y2MH'D|+ä_¼Ùƒ)‚‡Ìwa6E±H=˜Ùé×SLž?†‘µàô­®mëæà¾j+˜¦›g½ŒFw›$ÎÜ_ö+°¹?¾™çwHk´“:[ç^xUì=VÞIâj%Yêô£ €¢†²€œguUBd§RÑ Ë ®òqlÚu•á)»"¯‚Îõƒ'ø%EVÞˆŒñ|2Ý$""qO“ëQ9Y¥Úر¼ºÕ¶§KÝæ›ééÞjž!ýZþe5Ï+ÖÓþ `G/q Ípp5«‡Ê_29¿Ð’ñ_,O•—Ï_gø»áfºˆËí _¿¯U¤;ý>ÍØ3NÒ ˜EöÉšÓ ¡AT̪¹©¤7©Œy8z3³ñ ·e SâùïFþéNw9–­ü!ž ¹]BŒ“8Ì!©Vž´ÿûÜš ¦ð†0‡<ù^øY¹û>šWØ53ëËîµàr2O iz¹ú3æñ‡Ñ¬6sƒ&ײúų±çµø¿3Ä#n$ÓÒ»òq—€yüa¶kÍFƒl‚ZÔ ùÊ©ŠöG­IÀx÷3¬ÐrI~9a™ÿ;óQI“׆9oq[(Òãæx§ãÕOÁþ„íö IïI/„§PQì&7ކ5è¶]z5éhÆQ§h@ŽŸRn¦Èúd8Œ9ˆÝÉ(µ[¡Uט€k¿ÿ}ÝoÃ.þÁ0áe¼†'­”I»j –³¬Œóâxøƒ €§ù@±Ý4ôô‡hn1†w³o¡Šç”ÐËâÉ¢UÐû8HeŸƒð‚mŒH!ñ }ѥΖ–t÷°ÐæKªÙÕ2W¡ò÷‘õS¶tL4Œü÷ùÝêÎÃMî­µ‹ÅdµÚU XçØË!6ÁŠèIxþfÐæ£=>ê©¡ä ߦވV?i¸eà Ïð“õ\b;ˆœé¨B/Uâj´ãÅ6Fv Æ0`‘ÙËæyÅSð„›LÁüêµ7N¬nB±$ÂØ: UŽ0Cv'Ép7INêÓ7m#iÑù´X¬ú)kAÓx¹ë˜}GàwœÒÅ0댟½¸DÑYe½Ê?bóà_÷å{Ï1ô½I'\p"ß*ãz !uœÊצj˜§]çJ%À4‰…Mú‰zvÜ¡P¯HˆhXía‡R6ÒeæÞSÒc;»LLëQ«Ûr‰¢-_G P$æ|psÑü®Kͼk!Gy]!“Ñwx%ÄD¹ºæBL¾v,á–áü ,9Ñi)x«`—RÒ‘ò}E.×ѵ´¸2Á ÑG…äN&64›Ùü T–ŒÁìù)ê*šéŒüFIDEMž­ÍâѰRÿäkÙ=¼\)„…q­ ŽøÖÀx~ƒ•ˆ4lY°ìÇÂM‘« MاŠp8_úÏU¿X’XQÕTfü¹ùòß3@峺dQ\*²¨äCªNÓÖ;PW,êÃ\ 3‚Yå–$–_æ WÈêðCô!ÏfýõJý—›dI(¤ek”o‚à ł*¼gûy‘`M)MåzÏ¡D,0gƒ{ÊFÇWàÕK¾Iã_¬{ú,U¦iµ;0ˆìäûme,\ÞQ6½‘ÓÀc°Ô¯CÀ”–Y ¦P¢Í9ˆ‚¶øÖ̯ÿ`†³V"7f«0Çck=©È‡—µ¹rè!ÃËÅÝb¸- ´gÍÚˆ¦@Æ.ÁtÞ‰V7”⌬»ËR´èd/õè(;P=ˆÏrVl½Vr3Ý@0ª*I$ )>O%QÆZÈO‘Z㔦PBõ¿»§šUNÈÈŸ=¬¢ïšÙOöµy5jY¤øza”r®•^ëñ.ÃÓNlÎòŒ÷ë°,.µN"D‚WMà”Î{•W¿ qÿD1WvUè–Úò踴x³¾CÐ'Â1Wý=SgÁÉÂFÕá÷ÃýIw†Ã[Ë*;´£­:#Ô]åMI0R¸Lêc#E¶½{J ˆq¬Ñ};µJ¾¤Í–ìB,"™“ù¿”7‘Pó>zu&\*9E9¹bØ–1wÄ ÙÅœ²Q2wE*Ø]Õ_“‹ÍÁ®±í„e¦:›îò–Øëþ‹Z)oã¬Þ¥û‡æ¹›Ê{¢O{{w½Ñ˜Ÿ[v´’$ôxݹå-‹½â$<Z±‚]‹„¡)¿˜ªîRAQyË Ø%·g0l.ý»fUÞï葵¾#×Å ò“´µ†kßS…„½M9—mP†JQö“ÄB^að È·;ÊGèNÿª4”~BN|ñ¹pŠ$y³zVu1*?GKwͰÃ_ ºý̆µ¾u S÷|Ž 7“Ù+÷EJ–€p«ÔÝ˰}"áªLƒ]–€Öv¾Í¹X??•ðÙ‚{ ðê.¢g2š‰Úo²;d¥à]#õª\õaEåÝÙšJnoá‚^¾%]±}©çòû\j¸-ŽÂ21àáB`DíDñöŒ;ÚB°ùUì3Å™i@ãDL¿}©êi'ÞRÖ˜ïpìÊVÓ]`¼ò•(Â]¥žèı‹'ÂÂŽ"©—{Uþ…¹-:$CÁ‹†÷þö ÜwÉ`?+K¶QhhÜì0Y;숀Íý ؉øÑøqÙ;*=‚qwódß¶,ZÔu€˜£¢ I-ÚÁ’ŽŽý}›Ô”Wls­p†èiz’‘ãõ"X‡‘ðñ;#ØÑ½î˜äùVÑ»á=®×&óa`<ÓËYO{*E kÁö§+ {o\Êh ›³Çµ<* …Òíf+Pk*vóÈoù…jÇ,øNËÇíi?”²´cJ^¡Ü,ð<-yÞkÆxÔX%'É9ÿn.ÒÞl•púo¹¬¡Dû5¢i¦G©´BÚ¦æÔí2Ö0‰‘ÉÏàëë´e=ƒ.“Òes6ßB‘£´ .ÀÑ»¡¤4G•k *$Ÿæ!¬·ïf ]9@‚Ä“TÄ4ƒ¾Þ÷l©ƒ'î3{A¨Hi ‚-“•|¤°·7®üÊqœO p‘×<Ã­Ž¿’­-Á´ ¡ðöY:ùÿ€fm§‰ñ=êMØ+ñÅݱl:Fޝ¡ 3lx¥Ïg×¢Z+ €U®IC ƒZc‡W…R™åZÕj= %©t†L.âúûœ )}ýÆÇUïNýòþм”°#L.ç·ÙÓE˜Ÿ¨À“,ÊÌÆá,žé7‰²ôNÅF$´q³3 40f¨"ôcÂG•«™Zn*Zôû$ÍåE#<Á—ÁëŽÞ¨=B›ãÊ뤳± ‹cð6§&N¬Ê“`IÎÕ®/Û@½í!JKé¸ClÛq¾5V#?onÇ\%v‰°ÅÈõ6©®û0UÊu‚"¾–NùšQ…a/™€óéyPCp([GwîûüìíŒ×`U£ór”ÄêÒˆ±í¹àÒ¤WÃéФ†§ÔÔñ¡&]’¦>;ZAaáóG¥‚‚ïnjê AkÿUåj1Æc¾‚ÊTnGb?H.à|O—X^hìål5c3„Ï ÛÍI£‡jž‘þ†[fdÎÑuvV€T¡”•õÕâòØaíaΰã‡^²ë%±Æ´Ýê…^ÔÒV`×ðVâm+55B·XÞ-ñ2s—…>oÑÌáððÛY{©îÃÉŽ˜¯=´eÀ'³S lôPºË³ªMÛÑEÎÙðRVH ç}+eïªk‚ŽÓy^NÊ5sU ‚4yo;=Q?¬ŠÂ{h¹F·1‰É÷A6šÑWìÍaas¨B,;ŸˆZÑbÏ©W¯ý|FgóÞ@ƒ©}s‘D¯ªèBÌj7¤¬ÂÅŸÌei„,î« k95ôó—yɰŠëÑÄ!|«»Í}Œp"ÊvÝäi·÷3Û)gòô¯‘õMÏÅíojpà X¾^©Ü3žÓÇv]LS˼!8AT߬æû{¼¿FK•&*o•° ¸e#Z±óÃK—ˆ¦x´•é\{?“)/ÞYÝ}]ϱH¯Ï™#ùºù÷.€Ùà¿Іâ¼D¶±#k¼‡š·å>7°ÜÆÑºM*õØ5ÿö ´èÁêîæÑàŸÕ3Ðò#|ªb‹ß|fê:Ó¤Fø5[&7µÇŽÆˆ¡ ãòóº")Ìîײ@‡)²ø‰;‚‹É¤¤°ÅXî‚ÖÁ{2ýœ;€ ÒîAðB@o©Æ;:Q?·P> µ’e—`kš•8œG°$Å*󮣦æt+ú»G£w‚BªŠI»èEÝŽàíÓÞÆÞ³ Ð«Õå¼z'<  3¢ç‘2¡cÅxÿ•v"Û6*»‰a‰#9ùöô)(CøÒÎ+Ó$  ÷SC_йÊuX¤¹Z¿–> •æu®F“ŽqÒh \#riåU|R? ËÏrü:£¿Š)ÁÀAÒ½H èR´1HÅ4 #ödÂôC€’jÅlש(œ5†#Ëc;§Á¨TTŠʤ²˜áó/" ®Ç»¦%NvþÇÞRy!Ú O¤qû…ëäfæ ¤;ôO:à ´þ\ŠÎ¿ 7 ×®Í©M7š….“P¸»[,ÆZåWb?f=0-ˆ¼‡K‘±ÿÔdib\’, IÆ¥ýôƒa•‹yz‘ëËÈ*c­ÅïA^H3ÒmÿÆ5¹Ég'×W^ËÞ¥é8 ¼sÀІ(³ &rRƒÓt"8Y­ ôör‰»® ^§Éaµ øhYß!¥¼ýìÒ4ŽŽ Yéœ4€ XXp®®BçÔpgù^9WVæfj;v ÞHÁHh7Ù Én|u¬`Û³™øº£ÜC 2ìõ#‚Þ³ŽÈPÐõÃ$k´ŽŽ F~ÂR\o5™ÆÖ‹–tš®PLÍ.Ïo¨SÇö±û ÌNd@·Æý«Ýñ‹yÁQNð­‡ (¿"®ÙÂb6Dlñ ÚÒ‹=»˜#~ý)Cr²DÙ…#nøSPÁx60ÅÇ*˜â¿®¾`úOÎ^·Kd)”XçFÖߘ<ˆ¨FÈÊ_e–€²ó¢xlκºz?„Æ£×äa.Oª¤ÁX ××lB¡`­~oüŽå¸Tmí8*&^è>…Oˆ}*`Píï?·àÍÕ¡¸®@ n©B¥¢£‡c×9+ê\'*#ÕK0èÉYö]cŽ”hIPÃ]€.Xæôß]¼æueVC`QMÌ4YTƘiR)_0nS×Ïé¶Ž8è«t„B¿ß]Ðá‘’Ó7ÖB´Un‚?³mÀ \Ì`$Áþé3a˜‚±}uŽÂœšÉR¥ ý=´˜¤sà×Ïͤ>@èPÁ™›‘ñm¼^”H—ØÑ¥¸°™âÝíÜÇý2…¾?aJ™*ˆ€`ÃvvÎ|Ó€év…ƒáúùÍQ_¬š—M¥Ýá/.¸Ï6 $fòžùÆ8º5ŽªÀšÚ½Ð×;GÔc ;ÛÙSòêÓ‘óï>ã9ŸÔ%gϦ÷V•ve-˜¤˜¾'ȾK¬•Áý«5fXUÓÈè%a¶\Ë›AŽžNmb3cµVtg>2*T§7=!êÅä\ÒP"„GSƒ| &*–+x»|ØNæÀR˜j¢#ÐÉW^ýfR<°&½bZô–ÉPÖ'ù¤KV槃Ðz„²½ß£±zŒÒ€ÏxW7ñíÆ4ÅééÑœÐD8YÍ8÷š:– O`ÝHù:€»1wXDó¹ôìó#ðXà~ŠT\®Æf*xÁÚÎÕhaxe_4.2.4.orig/extra/haxeserver.bat0000644000175000017500000000007314146064214017370 0ustar andyandy00000000000000@echo off nekotools server -p 2000 -h localhost -d .\ pausehaxe_4.2.4.orig/extra/images/Banner.bmp0000644000175000017500000006233414146064214017706 0ustar andyandy00000000000000BMÜd6(–9¦d  9448448448448337337337226226115114004004//3..2..1--1,,0++/++.**.))-((,((+''+&&*%%)$$($$(##'""&""&!!% $$##""""!!""""""ÿÿÿÿÿ9448448448337337337227226225115114004//3//2..2--1--1,,0,,/++.**.))-((,''+&&*&&*%%)$$(##'""&""&!!%!!% $##"""!!!!!!!!""ÿÿÿ9448448448337337337226226115115114004//3//2..2--1--0,,0++/**.**-)),((+''+&&*%%)%%($$'##'""&!!%!!% $##""!!!!     !!!ÿÿÿÿÿÿ9448448448337337337226226115115004004//3..2..2--1,,0,,0++/**.))-((,((+''+&&*%%)$$(##'##&""&!!% $$#""!!!         !ÿÿ9448448448337337337226226225115004004//3//2..1--1,,0,,/++.**.))-((,((+&&*&&)%%)$$(##'""&!!%!!% $#""!!       ÿÿd]ÃWÀ M¿!F¾!EÁ B°)W"P…sÂtÄqÃkÂdÂ]Ã-[ÿÿ944944844844733733"½ä˜ú¢ù–÷‡ö xô!jò"]ñ D¹0;i500349O€‚ã…õ |ô!ró!hò"_ñ"Yð#Wð,x1--1,,0++/++.**-))-((,''+&&*%%)%%($$(##'""&!!% $ $#""!!    ÿÿ «Æ‘øžø¤ù©ù¨ù¡ø•÷†õ wôR·'QIzqÜ só!hò"`ñ"Yð#Vð"Wð"[ñ"`ñ"\ñ)l!¹Æžø˜øøøø ø¥ù©ù§ù ø—÷e³ YË"Zñ"Zð#Vð"Wð"[ñ"]ñ"^ñ"^ñ"^ñ"bñ"Wð(lÿÿ944844844833833733)ÌÍ®ø‘øøøøøøøø¥ø ù‘÷ {ô"Wð#Wð"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ#Rð(l1--1,,oll‘ŽŒŒ™——‘d``.**-))[WW‘˜––ŽŒŒ‘daa% ™——˜••ŽŒŒŽŽ”’’)$$(##:66ŽŽ–””ŽŒŒŽŒŒ¥££¦¤¤ŽŒŒ•’’ŽŒŒ‘vss$trr‘ŽŒŒ“‘‘ŽŒŒœššSOO($$ŽŽ“‘‘ŽŒŒŽŒŒ’ŽŒŒŽŒŒ’ŽŒŒŽŒŒ’ŽŒŒŽŽ…ƒƒ ÿÿ#ÏÊ Áøøøøøøøø¢ø˜ø…ö…ö‘÷ƒö"[ð"Xð"_ñ"^ñ"^ñ"^ñ"^ñ"_ñ"_ñ#Mï)pº¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÄÃð®®ÿÿÿÿÿÿÿÿÿÿÿÿº¹¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXUUžœœÿÿÿÿÿÿÿÿÿÿÿÿíííáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>::944ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ833RNNÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÕÐ"Õø‘øøøøøø¢ø˜÷…ö†öˆöˆö‘÷ƒõ"Zð"Xð"_ñ"^ñ"^ñ"^ñ"`ñ"\ñ#Hï*o¢  ÿÿÿÿÿÿÿÿÿÿÿÿ«©©š˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ¶´´œššÿÿÿÿÿÿÿÿÿÿÿÿ°®®,'','','',''-((ÞÝÝÿÿÿÿÿÿÿÿÿÿÿÿfbbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÍÍÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyvvfbbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæåå944844844844733733/ŽŽ#çøø˜øøøø¢ø˜÷…ö…ö‰öˆöˆöˆö‘÷õ"Yð"Xð"_ñ"^ñ"^ñ"bñ"Wð#Fí+1--1,,«©©ÿÿÿÿÿÿÿÿÿÿÿÿ«©©.**-))š˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ»ººC??ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö÷öööööööö÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@<<}zzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb__$WTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÌÌ"d``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿÿ$éë­ø’øøø¢ø™ø…ö…ö‰öˆöˆöˆöˆöˆö‘÷ €õ"Yð"Xð"_ñ"^ñ"bñ#Rð/Ž¢  ÿÿÿÿÿÿÿÿÿÿÿÿ«©©š˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ´³³àààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÊÊÐÏÏÿÿÿÿÿÿÿÿÿÿÿÿäãã"ÒÑÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0++c``ÿÿÿÿÿÿÿÿÿÿÿÿýýýìììêêêëëëëëëëëëëëëëëëîííÕÔÔ€~Àøøø¢ø™ø…ö…öˆöˆöˆöˆöˆöˆöˆöˆö’÷ €õ"Yñ"Yð"`ñ"_ñ#Mð"¢  ÿÿÿÿÿÿÿÿÿÿÿÿ©§§˜––ÿÿÿÿÿÿÿÿÿÿÿÿ´³³‹ˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtqq2..ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|yyc``ÿÿÿÿÿÿÿÿÿÿÿÿçææ$944844844844833733722!Ìïø¡øšø†ö…öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‘÷ õ"Xð"[ñ"]ñ3”2--1--0,,«©©ÿÿÿÿÿÿÿÿÿÿÿÿ žž.))-))‹‹ÿÿÿÿÿÿÿÿÿÿÿÿº¹¹EAAÿÿÿÿÿÿÿÿÿÿÿÿùùùº¹¹»ºº¼»»ÿÿÿÿÿÿÿÿÿÿÿÿýýý'""&!!%!!€}}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÑÑ""c``ÿÿÿÿÿÿÿÿÿÿÿÿæåå ÿÿx¡ø–÷…ö…ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö’÷ ~õ"\ð#Rï$¢  ÿÿÿÿÿÿÿÿÿÿÿÿãââ°®®±°°±°°°®®ÝÜÜÿÿÿÿÿÿÿÿÿÿÿÿ´³³ÎÍÍÿÿÿÿÿÿÿÿÿúùù:66ÿÿÿÿÿÿÿÿÿÿÿÿº¹¹ÐÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2..c``ÿÿÿÿÿÿÿÿÿÿÿÿüüüçæææååæååæååæååæååëëë¼»»“Ùyö†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö’÷ ‚õ2‚¢  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´³³vssÿÿÿÿÿÿÿÿÿÿÿÿ|yy•’’ÿÿÿÿÿÿÿÿÿÿÿÿc``400òòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{{c``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãââ944844844833833733722!×vö „ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‡ööø1o2--1--0,,«©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº¹¹+&&'##þþþÿÿÿÿÿÿÿÿÿÂÀÀÑÐÐÿÿÿÿÿÿÿÿÿöõõ&!!%!!ŒŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáàà""c``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖððbg½û ù!€õ „ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŒö‡ö zõ![㢠 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´³³»ººÿÿÿÿÿÿÿÿÿæååGCCòòòÿÿÿÿÿÿÿÿÿ¨§§ÉÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóNJJc``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÝÝððÈá«ú»û£ù!€õ …ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöŒö‡ö!rô!tô!mó,y¢  ÿÿÿÿÿÿÿÿÿÿÿÿèçç½¼¼¿¾¾À¾¾½¼¼ãââÿÿÿÿÿÿÿÿÿÿÿÿ´³³a^^ÿÿÿÿÿÿÿÿÿûûûØ××ÿÿÿÿÿÿÿÿÿÿÿÿPLL£¡¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñððc``ÿÿÿÿÿÿÿÿÿÿÿÿìììMIIJFFJFFJFFJFFJFFOKK>::ÿ÷944844844833833733722dcÏù¥ú³ú»û¢ø!õ …ö‰öˆöˆöˆöˆöˆöˆöˆöŒöˆö!sô!oô!uô!uô"Lå2-/1--1,,«©©ÿÿÿÿÿÿÿÿÿÿÿÿ£¡¡.**-))‘ÿÿÿÿÿÿÿÿÿÿÿÿº¹¹*&&õõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿééé'""&!!%!!URRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª¨¨""c``ÿÿÿÿÿÿÿÿÿÿÿÿááá ÿÿ$ÛÜÁù©ú²ú³ú¼û¡ù!õ …ö‰öˆöˆöˆöˆöˆöŒöˆö!sô!oô!sô!sô!zõ"Xñ(t¢  ÿÿÿÿÿÿÿÿÿÿÿÿ¨§§—••ÿÿÿÿÿÿÿÿÿÿÿÿ´³³§¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜––ñððÿÿÿÿÿÿÿÿÿÿÿÿ³²²ÛÚÚÿÿÿÿÿÿÿÿÿÿÿÿVSSc``ÿÿÿÿÿÿÿÿÿÿÿÿøøøº¸¸¶´´¸¶¶¸¶¶¸¶¶¸¶¶¸¶¶¼»»ƒ€€ððcd#ëø´ú®ú²ú²ú´ú¼û ù!õ …ö‰öˆöˆö‡öŒöˆö!tô!oô!tô!sô!sô!{õ"cò"?ߢ  ÿÿÿÿÿÿÿÿÿÿÿÿ«©©š˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ´³³MIIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB==³²²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgccÿÿÿÿÿÿÿÿÿÿÿÿñððc``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÉÉGL944844844833833733*ÐÏ Þù«ú±ú²ú²ú²ú´ú»ûŸø!õ …ö‰ö‡öŒöˆö!tô!oô!tô!sô!sô!sô!xõ!ló#Gï'e1--1,,«©©ÿÿÿÿÿÿÿÿÿÿÿÿ«©©.**-))š˜˜ÿÿÿÿÿÿÿÿÿÿÿÿº¹¹*&&*%%åääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÜÜ'""&!!eaaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ïîîÿÿÿÿÿÿÿÿÿÿÿÿ¬ªª"d``ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³²²I$ÐÎÐù§ú²ú²ú²ú²ú±ú´ú¼ûžø!õ …öŒö‰ö!tô!oô!sô!sô!sô!sô!sô!uô!tô#Nð)sº¸¸ÿÿÿÿÿÿÿÿÿÿÿÿð®®ÿÿÿÿÿÿÿÿÿÿÿÿÎÍÍ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ……LIIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûollÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{{nkkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÊÊðð#ÄÆÂú¨ú²ú²ú²ú²ú²ú±ú´ú»û›ø!€õ!õ!rô!oô!sô!sô!sô!sô!sô!sô!sô!zõ"Xñ&kyvvº¸¸º¸¸º¸¸º¸¸||sppº¸¸º¸¸º¸¸º¸¸…ƒƒ611º¸¸º¸¸º¸¸º¸¸º¸¸1--~~ÇÆÆº¸¸º¸¸º¸¸º¸¸fbb¨§§º¸¸º¸¸º¸¸¾½½«©©EAAº¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸º¸¸ƒðï944844844833833733'Ã͵ú®ú²ú²ú²ú²ú±ú¯ú­ú±ú»û•ä vò#fó$có$eó"ló!qô!sô!sô!sô!sô!{õ"bò&k1--1,,0++/**.**-)),((+''+&&*%%)$$(##'""&""%!!% $#""!   ïò²Æ«ú±ú±ú°ú®ú®ú°ú´úºú±èmƒ.9«÷‰ö wô#ió$bó$fó"mó!rô!yõ!kó(lððµÖ¡ú®ú°ú´ú¹ú¾ûÃû»ëo‡ #AI–³Âû°ù›÷‡ö!uô#hó$dò#jó,sðð944844844844833733!™Ä©ì´ìºï½íÀí¼ær‹"&511500400CN¦ÁÌîÅî·î¥ì’êé3i1--1,,0,,/++.**-))-((,''+&&*%%)$$($$'##&""&!!% $#""!!   ððññ9449448448448337337336226115115004004//3//2..1--1,,0,,/++.**.))-((,''+&&*%%)%%($$'##'""&!!% $##"!!    ÿÒ¦¦9448448448448337337226226115115004004//3//2..2--1,,0,,/++.**.))-((,((+&&*&&)%%)$$(##'""&!!%!!$ $#""!!      ƒm§§9559448448448337337226226225115004004//3//2..2--1--0,,0++/**.))-((,((+''+&&*%%)$$(##'""&""&!!% $##""!!        !`eûû9559448448448337337337226225115114004//3//2..2--1--0,,0++/**.**-))-((,''+&&*%%)%%($$(##'""&!!%!!$ $##""!!        !!Üðÿÿ9559448448448337337337226226115115004003//3..2..1--1,,0++/++.**-))-((,''+&&*&&)%%)$$(##'""&""&!!% $$#"""!!!!!!!!!!!ððhaxe_4.2.4.orig/extra/images/Readme.png0000644000175000017500000002040514146064214017675 0ustar andyandy00000000000000‰PNG  IHDR•iò|¾í zTXtRaw profile type exifxÚ­˜i–++„ÿ³Š^“,8§wÐËï´«îTᄀÛ>åLãLR(B¢‚ÿçß'ü‹W®%‡*ÚÛh-òª£Ž<9éñõzS¬Ïçóò>K?އ6Þ7e† ÇòúÚüuL“qùvƒÖ÷øúq<è~ÏÓß½ø˜°Ü'gNÞ×õ÷D%¿ÆÓû{øhÖï–óþÛþLÓ{ÒŸ¿W%& ’£ì…q>Ÿ§"(£LŽõùlùŽ(ç™ã)_ç.|žþ”¼š¿Î]œï+Ê©±½/h?åè=žäëÜ=ú>¢ôqšü4?HðKîα~Ž¿V7k#S-¼•^!¼ÂàÂÅâ^Ùh¼•?á\Ÿ÷ˆ÷!3n3Ð\¼wH#e²}RM–f:ÉŸãN›kö¬sÞäúŽõ¢yäý€Rï;¬Àc¡tðØ VΟ±¤ç¹ãyÞN'[âÊœ˜,qÇ/ïðÕà?yNtÎ¥nJ7™5?)'®|I@¹ûÉU’Î7yç—wø„õÛë[@Pž4w8ãzM±$}ãVyp.\'±†ø*¤öž€€x¶L* [*’ZŠš³¦D;øL"Ï¥æI$[ l • ¹çûlîÑô\›%¿†‘€Ò(•~ °jø£µÃ¡)Ej‘&*]†ÌVZmÒZÓv5jjѪ¢MU»½ôÚ¥·®½÷ÑçÈ£ a2ÚÐ0úcN:™zr÷äŠ9W^eÕ%«-]}57ôÙuËn[wßcOËVŒò·f¬Û°éÉ¡’Wo®Þ}ø×é7ÔVý˜"]9‘‹ˆåš@\/:_ÌbOµæ‹ÜÅ,ŽLQHµ$K1¬ž²œô‰Ý7ä~‹[ú·pË„\¸Ðý? º7r¿âöj6G)@· oNc9›Åƒ”¡arjj'®ÖG©k&+ïQÚ8±v?Yæ$¯·nF®ãù ¬ŸhAõD÷ÁeV=Nê¸îƒnT¬•ygâ™GÝÚÜ¢ÞŽ´%$/‹ŸbvD-ì3Ÿ¬$¥YÚãô^¿t㪃b½¤z˜ÎAKp þÏ+…Õó‰<Å;9c•W4…£¾˜mÅP*}ãÊO»¿mãJ·(Lh‘üXî–cø8ù_w" ]Îh)ª‘h4:Y”ƒc÷è/{<‘R¥õëð>áõ8®èѤ¢L§æ-¶ìzÖËÁ¶¶1HÊzT¼¥ãá†Y£B³üp¸ƒßòœ,ÔL™  vƒ¹­=Ù‰ÑÂ>Èx¢1ªÚ®JQÒÚàl¸Hv=^ÐFº#ÌÝUšºçÒ¦a¸. cÂtí»~Œ¦S ÒÝŸ€JpÝ<”+³Òj£$D³ž*Êlî/ÅîŽA¡6;bçz—â@x=š°Ö€$Z«’-VÛ’ÙÛmQ[•ŠöÔ]ੵaÖv½^Ãôé˜,Kh&âAÿÉš³œ%´sx'$¤Ý¹íhLî`M}³ët–Èå”mäÐNP°»苚“„ˆ„ Ö #épº+Ù! éPVh>}¡¥ÄféO Of8=Þêvÿ)ñŽá‹h0ÖÓ}|S‰H…lþšMÚ’BËÕcÁû£Tƒy‹5a ¶ÀéïØ4Òpè@Ë]7yïžn7G¿ ‚6íS¥A¢{F;"–GsFã®) ¡Høuy˜AcëqCrúE¯ê5‚€Ò·njwcNƒD¼~é™öõé´Êõ~!J©uÇmçj4æƒõÐê¶æG—bŒFO7ކw°D»¡ãá¯Æz/ÛáiQp*»¥p5§÷CGã‘©qëËÖfWÁt­b®ìEòÞ5ÈúD1\é¢Ä3³²®ö’6"õoŠIøÓ Q:·þ úÁÏ=’  ÿbKGD}}}Šœiƒ pHYsÃÃÇo¨dtIMEã·k_ €IDATxÚí{”U€¿ªî™dHH&ƒ•QY‚ ,rVEN¢+Q@]IŠ »«Ñ!$ \EÐãEÝ£‚ˆI oâ"‚èQdÉˆËæÅLf’L&IO×Ý?nõÐÓÓÝÓ{«nUÿ¾srÎd¦ûVÕíÛõÕïþîAAA\Ã+ü°ïþƒ#7òQÿ€÷3i¦‚ $N*¹çgœlx È*¼6…×àµ)ðKæA`EÛœþ(“¥ÀG€ÉÆ VìÌôe ¶g¶d 硽§Ý´ñE„ÔI¥Áù*±KŽWCþºàÚóÁN/“ÄDò)‚ $¿Òo½éÉ»'«!õ\^»ÊøSU"?ɧ‚>© ×K¢P Ñ•7Y‘8±H>E„ÔJÅõ¼J¡Œ^CÂÄ"ùA’N¶¢Tb˜¯bR(cÄâA°Ëý¶ƒù”Ào.óGÀ7 •5¸Ëðùõ×D\Ï/n3\æJà>Ëç}=pŒÅò¿|Ç`y×ÇÙøêŸž¬ð÷›€×¦Ô!O…×>±T\˜¯Ò¬PFÅ2Ii?:.ó)SÐë°™ä·ËÊX8¿1ÔóB ×qnR¹ø=Ða©ü#Ÿ&öÃx pEä[U„ð&Ëò“ʨ£ÊÍØád}­B#–î “|J+³ÐB™ï¦[>ï'ÏY,¿ Xn¨¬/XÊ3Àg¤ ×,7ó*õ % b‘|JËr”¥§ØÉÀœÿ×Ð]†¶øW Û€`O²pnzkñÝÒŒk•ÊÔŒ·Ç ×Å"óSZ–³kºèµô¶[*°ª‰÷g›|5®”&\‡T\›¯¢v7'—Å"û§´$YàÃËŸ ¼&‚ëØ|{Ó¥OŽoð½çGX8§'Ñ+ uIw櫨Ý>jS›±fë”Xrá?¡Õ8x…åc,ŒèZÖ¢G9ÙÀ¾Dýý&SË-œÏzÛŒ½Ò„‘ŠóUL Å5±H>¥eYÁ1]'ö…ÀKe¿ø@ïù´%i¯~'Íwb©ì+{ã-ÌWI™P\K•|ŠÄ/é¥85‚ã¼;s3ʱ8{[Ú­BçXjá娙ö8p¥4ߤ BOd÷ oZ<]`¶…âŠX*äSp³4ÑÔrz„V,Šðº®°Tö,`I¯]‰îþ2ÉÞ0º”‡½Z¤ÒÞµ1|¾ìM7†¼JTB‰],•ó)?ëìé}LšhjYá±>HñN§öYÆ :ᯤÙ6+•®Þ 4Z±µ˜«B‰B,eò)wʈ¯TszÉ‘¸884†ã®n°Pî±¼¸ÌÍÇ©œgi”óMÒlë£ò&]žw‹Rjðú‚~¼Î j‡¹\•ëB#ÌïÇR&Ÿ"QJºYL‹³)‡ÑÊÊŽ} ð`¶ár¯FwQ­0\îZô&a.²ƒò9¥8Ø\³T236äGú»¯~0Ú"§›“JR„bM,ãó)keÄWê9ËsX>¼DýÍÛ‹^2æjŸ_ ‡¿F›6Å è\«ìtH*㨾ô½ïÝJÑŽf¦ò*Iʱê +ɧȈ¯ôs0ðNΣ˜Ó±ÿ,µP®é­z϶J“µ •Lç†1#ÁLÌWIªPL‹¥$ŸrGgOï¤9¦š…èí]`QŒÇ¾¸×áÏéè-ŒR ¡oVšÜ_%éB1)–¢|ŠŒøj ;t.ÀlT=艄ý~FÏŸ’¦jY*m%#Á•JZ„bD,có)²ÆWúy3æ6Š2±umÑ.ÛRÊÿÿâØg¤€¡“àBÔ´>N ¸Õ÷X¼¡‘¼JÚ„2F,ÔŸ¼W{ÆD)+Z¬Í½ø„¡²:Z,Jy¸½OH³,VÇX'?Þƒþø…(!"©´Ô[ öÃѼJÐÚBiF,jÏèk:{zo±6wJø¯Uh>d¨¬5è‘N&¤òôj¿}1Öͧ€‰g…b6ŸD(€¼ nÍxþ2|ލuhqÚ…Ò¨XÂ|ŠäRZƒùÀK •µßÜIóó]Úй•oÄX7;ÃHåâÄÁL·b”÷í8E¼ØÞ´T&ôL0Òßýyà‡µH¥U„R·X^̧Ȉ¯ÖÀÔH«gÐÝ_ GO½Ïй}#æúù zÿ•e1ÿzàW kS¯ £«¸øz°EYêJx?žœ(¯ÒjB#– ’÷Eù‰RÒÏAÀ?*kMÑÏw*󭘟ãÑWqLüýKŒ2K-uI%3£7\Qm¾J« ¥V±„ù”Õ2â«%øz¡CÓRéÁÌ7ÌCÏŸ‰›\xCs$|Ú–f£TF£Ÿ?—ZÜêB©E,j·ÏÚKBô˜êúÚ±¨aOIc–(¥Ö–ù]Áò:ToöY,?‡ž7”“&êT236Lñ¯Ä¡Ô#¥£”Ç¥VZâ{eêF=„Þ¤”GЫéšàè!]à4ì.!Ó†^TSpI*~»ÿcöfŸ¡Ô.Ï“\J‹ðÀ« •õ ô²ñ¥ä17¼s£Ôš¡øBǹ³Kå &¤‚R²Ï{9¾Tb-;<Ô.“šh Î6XVµ¥Tî2xœ¸»À|à»À”Žõrdßy÷¤ ©%ìU]~gÞ½%¿Å×RËúç*N7SÑ;<š ü¼Êß×1>ß(ób~z¿x[„Ç;Ýí'¸ •‘þîéìRËÄBð²åã&µ’jNÅb‚©¾jn?ð°¡cµÿSA<X¾F-‚‘ÊÕtþOÄ2¡P€Â¢8Ëç&ÑJz1¹ên-«'}X½ìG^|SšlÌRÉõwO>­¶•,S,b©.”Bmg9R)õ~©¡T2˜k¨,ÜQÃëLæUŽ^q-Žñ3[€;@[S*,a¿š¡Ê ù±TJq'\¶g^·'Í/u,cCW~‡ÞÌj"þüÍà5Dyƒ}n¬½uz‘FÁPèYûͲ¿{º‚ Ô€ª<Œ8K01—BL‹P¯]¡†½£öëñø?iÁ6×l5øPôz‡®Íd××Ú:^ûsà\ƒb\NÍ;&5Ì$ôh¯6>·À·Ð›† QJEÁ K½0A{kQ±L$”’¿¼Þ¡?íêÙ´X›û6p‘¡²¦Ž\×àpƒåÕ³+£I©ÌD/Ûò åúZ Ìv¨]ÎΠۧ댛b<þ6#R s)ãò)"–Ú„Rx¶Î#éãŽÞVUH>&£”§Ð›qÕÊ½è ’“ ^‹M©Ì>ëàgxpwÌ7ìZx‡W¨'RYÌ`¿Bí¨q }‹ˆ¥f¡hŸ5`ÙÎy¯½mZÏÓ²&A²™ |Ð`yûkë|Ï A©œ|;Ë€îör1ó:-ŒTÞ…¬bW*¹â(eGur±Ô-ÀkS(<€ÙÁûÛ¥)&š÷ ûåM1›x»†¦ïnµPö*ÌvšæÀyÄ¿#fb©i¤ŠWˆRÕ×@ ¥£ÂJ•_>8_fÙ'œ³äšjâíÀ§pí_@´'•â\ Ô˜Oi±4,”B­¿(–ÙJÉ,ûóRô'iã]˜m> øŽ~Fuž©á¹ÊÞ¥HåüÑÐ~¿¢ìü”KSB)0v“Ùåó»¥'“…Ô9Š2!dÑÛ!›âKè‘e¦yÄÒõŸ”¨*YR £” F£”jóSZD,F„‚Ϋq$ ‰V’É"¹¶ y7z¸® ¡¼{£µ®ÆíüO"#•Ñ\ À„óSR.SB}˲ÁSfÉ,ûd18&Å×÷&ôbÍÐ…žXhºmÀ¿¡71»ÈÒõ»F*—Ì;ì§=Zm–}RÈ>Ü×¹½>W#mòtKu4P":…Îýþ7v’ë+;¿8ò™LNp¨Tú¼\)J¹pL”²ÃÒ\ ǻ¬ …qy€#A.÷ëDp2ðЏÎW¡·G®——ao®ÇeÀö’ß= ü—¥ãMF/Ïß&Í~bü*QJç©ôY|xvT,6…R%N\60ÿPÉ­¸ÏY-t­ì³bkø'ªÈj)°ËR \,;©”ÎK•Ê6Ë=2Ž‰ÅºP µ?^,³‘y+®Ó‰¹-ƒ“Àiè¤u­,²T?…n®Jåÿ\c±–GKó¯?R3â °“OqX,‘¥@{Ùß.˜'óVætâÙ©0.N­ñµ¯¾béò]ôBŒ6¸ØWç{CO´ÅÀòu¨"•JO_FÖûrX,ùÍ1 …ŠyÁ=æ†OäIÊßÐÃoMrL…¨ê|ôŒ6X ü¢Á÷^ì´Ø.ÄÎ,þÔH¥|ù‚]ú–Ä’ßì 80%D¦T%Ó‹Gn Ÿ¨mqWuðzt¾ÃÔ8T[,ž[xgâfên-RQ[É‹3B)ĈYiŒŽÓœa!J±¦Úʇ‹îYt·W‡¥óÿà™&˸Øh±ŽG¯f,Ô$•8ó)¶Ä¢Jùî:ïCo4e’;,Ÿóo —ùJôró W~‹¥s¸Ö@9û€ÏZ®ç%Øi–.©D:?%"±ä·8($¯’Lw}õX>ç€ÆóÕXŒž¯±Üâ¹Øc¨¬ÕÀý–ûnÆÞ@…I¥ÏÑ)ˆÅÕ¥€äU\æ`ô’&¹‹hfaÙè[|ßb|}7p»á2?m¹¾g¡»ëD*UïÃ[žwWX”»ʘgÉ«¸Ê™˜¸:¢sÿ%åfA5ÇTà(Kç›C&3ÍÀ·-×õ¹>GåÛØ~…t¼K¦– ’IJv _ÿæxø¤á27XÖ°…óûk™ß=eá8ë"ú w »«fX(ÛÆ b𤥺¸óìK™Ræw×bgÅfWØQú| ÀH÷ÉÅ ]m È?œKÆ%å)/–$ `?¨Á1çzcgOïy(‚*v9›O©±Œé HšP@ò*‚ ¤X*[¶Ža±X’(”BÜ(yAR'׿§Ô!¯#è úý?ƒ Ý;9?¥ì‰‚Úãìô vzýjÐû²ö¾Òv¸Úåwæ{½åjŸw´Ò¯#Á—צPÈn‚ ¤I*®æSŠ%2èôû£¸¼¯Nÿ~oñâq«÷¬š¹†)j],Gq´Úë {8-É«‚:©¸’O)–È€G°Ã×£Ø5¡Løêôïo,»é—<§€Õ{®}͵ÀëPË3êhºÂ²÷z¨a`ÔïjÌ£¡ •öWAH Tâ̧”F"}~¹›ë„2'—‹žU£‘‹ž ¼£½…סð‹$ãD$ãÞ|A„Ƥi>¥4é÷«ÝLë–IÅÈåêCÖây§¢×.:º!xŠL‡bl$Á©d$¯"Bz¤b3ŸRŸDŠeòeà+Êdœ\–n €ÕÃײF)ïTàòQ¹ŒÞÙµd¼ð»Ôøî2›’‘¼Š ©‘ŠÉ|Š‚`‡ªO"ÖdRJÇÅ›°&Œ\Œ‰\Æ…ÉŒí.³"É«‚ ©4›OQaWQñè¬úoŒMws5¹(`õ®«_³&ã©B·Ø1Ýø+JfO˜øoF2’W!éR©;ŸRÈ®0éó›Y\Úzd2.}Vk†VÍ\ëAùn±F$Ó@$#yA’/•‰ö£/ŽD C|›šŽ<2™ˆ):¡¿føª™k•Ïಠ#—Z$³ÏCí »'Šd$¯"B⥲-¨.‘~ßä67±G&Ñq©-6¼jæUoäRN2“Þä¢Ä5ÉxÀ$i ‚ $T*jK ÔE0ä£vz6$’™Œ“K¹„ÝbÕú%ãuÈ $‹ÑNûá›^==÷xv¶ÚåÙîÈ")2©Äî«ñ|ß;VÁdküfó´¯?³Aš© ‚ ‚Ðrü? Uß-à$ø«IEND®B`‚haxe_4.2.4.orig/extra/images/Wizard.bmp0000644000175000017500000045566014146064214017751 0ustar andyandy00000000000000BM°[6(¤:z[           !   !     !!     !!!      !!!!      !"!!!       !!""!!!       !!!""!!!!        !!!!#"""!!!!       !!!!"#""""!!!!         !!!!""##""""!!!!          !!!!"""####"""!!!!!           !!!!!"""#$####""""!!!!!             !!!!!""""##$$####""""!!!!!!                   !!!!!!""""###$$$####"""""!!!!!!!                    !!!!!!""""####$% $ $$#####"""""!!!!!!!!!           !!!!!!!!!"""""####$$% % $ $$$#####"""""!!!!!!!!!!!!!!!!!!!!!!!!!"""""#####$$$%!!% % % $$$$#####"""""""!!!!!!!!!!!!!!!!!"""""""#####$$$$% &!!&!!% % % $$$$######"""""""""""!"""!""""""""""#######$$$$ % % &!!&!!&!!%!!% % % $$$$#######""""""""""""""""""""########$$$$ % % % %!!&""&!!&!!&!!%!!% % % $ $$$$##########"""""""""###########$$$$$% % % %!!&!!&!!'""&""&""&!!&!!&!!%!!% % % $ $$$$$########################$$$$$$% % % % %!!&!!&!!&!!'""'""'""&""&!!&!!&!!&!!%!!% % % % $ $$$$$$#################$$$$$$$ % % % % %!!&!!&!!&!!&!!&""'##'##'""'""'""&""&!!&!!&!!&!!%!!% A=={xx€}}yvvyvv€}}zxx`]]% $ hee{xxyvv||yvvyvv‚833„zwwyvv||yvvzww||&!!$$$ZVV{xx||yvvyvv||yvvŽŒŒ„yvvyvv||yvvyvv~~0,,$${xxzxxyvv||yvvyvv||ƒVSS$nkkzxx||yvvyvv||yvvyvv||yvvyvv||yvvyvv}}yvvyvv€}}{xxYUU% % % %!!%!!&!!&!!&!!&!!&""'""'""ƒ€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÔÔÖÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwttñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjggñððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹··fbbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYUUúùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÀÀ{xxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÇÇÉÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|yy‹ˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´³³EAAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;77ÄÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSOOíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¢¢ëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·µµ(##(##'##'""'""'""&""&""&!!&!!&!!&!!zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃ% % ÈÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww:77ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóó7222---((-((722-((%  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÉÉ=88ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââ$$Œ‰‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæææ+&&çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³²²% %!!%!!&!!&!!&!!&!!&""&""'""'""'""zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwÄÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúùùñððôôôôôôôôôôôôîííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿspp†„„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ||+&&þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIEEçææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³²²zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwjggÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúùù&!!ÑÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûû'##±°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš˜˜çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÊÊ(##(##(##'##'##'""'""'""&""&""&!!&!!zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃ&!!%!!ÈÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww% ôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ´´% 400ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ722ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãââ% +&&çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÁÁ«©©®¬¬®¬¬²°°®¬¬®¬¬²±±®¬¬®¬¬²±±±°°}zz&!!&!!&!!&!!&!!&""'""'""'""'""'##(##zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwª¨¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[WW€}}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúùùìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEAAçææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=99zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½¼¼¾½½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwTPPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôíííñðððïïíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïîîËÊÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”‘‘çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2..)$$($$(##(##(##'##'##'""'""'""'""&""zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÐÐTPPJFFJFFTPPJFFJFFÔÓÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww%!!çççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÛÛ$)%%3..\XXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžœœ% % % 1--þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÞÞ% % +''çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±¯¯œšš–””–””œšš–””–””œšš–””–””œšš*&&&!!&!!&""&""'""'""'""'""'##'##(##(##zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ0,,ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGCCqnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC??çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=99zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww:66ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹ˆˆÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÜÜÂÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ833)$$)$$($$($$(##(##(##'##'##'""'""'""zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww&!!&!!ÑÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÒÒ;77ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ……%!!%!!&!!)$$èççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÊÊ&!!&!!,''çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ833&""'""'""'""'""'""'##'##(##(##(##($$zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwzwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^ZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ400èèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÐÐçææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ955zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww*&&üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZVVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÇÇÍÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©§§çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööïîîòòòòòòòòòòòòòòòòòòòòòôôôóóó611)%%)$$)$$)$$($$(##(##(##(##'##'##'""zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÒÑÑÐÏÏÑÐÐÔÓÓÐÏÏÏÎÎôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww&!!&!!¸¶¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖâááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyuu&!!&!!&!!†„„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[WW&!!&!!,''çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿa^^411,'',''844,'',''944,''.)):55'""'""'""'##'##'##(##(##(##($$($$)$$zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÀÀÃÁÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww^ZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùù$C??ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòò çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/**zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÁÁÃÂÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´³³äããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³²²çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxuuHDDKGGKGGKGGKGGKGGKGGKGGKGGLIIMII)%%*%%)%%)%%)$$)$$)$$($$(##(##(##(##'##zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃ'##'""ÉÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww'""'""¢¡¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\XX&""&!!&""§¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúIEEÞÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿeaa'"",((çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhee'##'##'##(##(##(##(##($$)$$)$$)$$)%%zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwD@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëZVVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•““qnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷'""çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgddzwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃÅÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzwwÙØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ››#óóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóó!áááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ¾¾çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿeaa*%%*%%*%%)%%)%%)$$)$$)$$($$($$(##(##zwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÃÃ(##'##ÉÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzww'""'""'""ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGCC'""'""'""¼»»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~{{'""[WWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvss-((çææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿeaa(##(##(##(##(##($$)$$)$$)$$)%%)%%*%%…ƒƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙØØÚÙÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ƒƒ2..ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæåå‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäããÏÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFBB ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnkkgccÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒ¤¢¢¤¢¢ÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒgcc£¡¡ÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒroo.))ÓÒÒÖÕÕÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒURREAAÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÞÝÝ™——¿¾¾ÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒVSS*&&*&&*%%*%%*%%)%%)%%)$$)$$)$$)$$($$(##(##(##(##(##(##(##'##'##'##'##'##'##'##'##'""'""'""'##'##'##'##'##'##'##'##(##(##(##(##(##(##($$($$)$$)$$)$$)%%)%%*%%*%%*%%+&&+&&*&&*&&*%%*%%*%%)%%)%%)%%)$$)$$)$$)$$($$($$(##(##(##(##(##(##(##(##(##'##(##(##(##(##(##(##(##(##(##(##(##(##(##(##(##($$($$)$$)$$)$$)$$)%%)%%*%%*%%*%%*%%*&&+&&+&&+&&+&&*&&*&&*%%*%%*%%*%%)%%)%%)%%)$$)$$)$$)$$)$$($$($$($$($$(##(##(##(##(##(##(##(##(##(##(##(##(##($$($$($$($$)$$)$$)$$)$$)$$)%%)%%*%%*%%*%%*%%*%%*&&*&&+&&+''+''+&&+&&+&&+&&*&&*&&*%%*%%*%%*%%*%%)%%)%%)%%)$$)$$)$$)$$)$$)$$)$$)$$)$$($$)$$($$($$($$($$)$$($$)$$)$$)$$)$$)$$)$$)$$)%%)%%)%%*%%*%%*%%*%%*%%*%%*&&*&&+&&+&&+&&'8C…84~2~3~6788888888888888:…2nBnPˆLLLLLLLLLLLLLLLNOONL‚F„#@,'',''+''+''+&&+&&+&&+&&*&&*&&*&&*%%Zk¤ù–ø‹ö |ô!nó"`ñ#Wð#Sð#Uð"Zñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ!TÔ3q)'+)%%)%%)$$)$$)$$)$$)$$)$$)$$)$$)$$)$$)&(DqwÔˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö÷÷Œö…õ {ô!qó!hò"`ñ"Zñ0|*%%*%%*%%*%%*&&*&&+&&+&&+&&+&&+''+''_`ªø™ù§ù¨ù£ù™ø‹ö|õ!mó"`ñ#Wð#Sð#Uð"Yð"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ!UÕ3qCpx׈öˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö÷÷Œö„õ {ô!qó!hò"_ñ"Yð#Wð"Xð"^ñ"Zñ*ob`¼øøøøžø¢ù§ù¨ù£ù™øŒö|ô nó"bò#Xð#Sð#Uð"Zñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ!VØ4tDrzÛˆöˆöˆöˆöˆöˆöˆöˆö‰ö‹ö÷÷Œö„õ {ô!qó!hò"_ñ"Yñ#Wð"Xð"[ñ"]ñ"^ñ"^ñ"añ#Uð)o,((,((,'',''+''+''+&&+&&+&&+&&+&&+&&b`!Ðø‘øøøøøøøžø¢ù¦ù¨ù¤ùšøö~õ!nó"añ#Wð#Sð#Uð"Yñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ!TÔ5u*&'*%%)%%)%%)%%)%%)%%)%%)%%)%&FuxÖˆöˆöˆöˆöˆöˆö‰öŒö÷÷Œö„õ {õ!ró!hò"_ñ"Xð"Wð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð)o*&&*&&*&&+&&+&&+&&+&&+&&+''+'','',''``#ãøšøšøøøøøøøøøøžø¢ø¦ù¨ù£ù™øŒö}ô oó"añ#Wð#Sð#Uð#Yñ"]ñ"^ñ"^ñ"^ñ"^ñ!TÒ4sEtwÔˆöˆöˆöˆö‰öŒöŽ÷÷Œö…õ |õ!ró!hò"_ñ"Yñ"Wð"Xð"[ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï)o^`$òø©ø”øøøøøøøøøøøøøøžø¢ù¦ù¨ù£ù™øŒö}ô nó!añ#Wð#Sð#Uð"Yñ"]ñ"^ñ"^ñ!TÔ2nBnwÔˆöˆö‰ö‹öŽ÷÷‹ö…ö |õ!qó!hò"_ñ"Yð"Wð"Xð"\ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Zð#Hï)o-((-((,((,((,'','',''+''+''+&&+&&+&&]`%üø¼øøøøøøøøøøøøøøøøøøøžø¢ø¦ù¨ù£ù™øŒö~ô nó"añ#Xð#Sð#Uð"Zñ"]ñ!UÕ3q*&)*%%*%%*%%*%%*&'Cpy؉ö‹öŽ÷÷‹ö…õ |õ qó!hò"_ñ"Yñ#Vð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Uð#Fï*o+&&+&&+&&+&&+&&+&&+''+'','','','',((]`%ýø!Ðøøœøøøøøøøøøøøøøøøøøøøøøžø¢ù¦ù¨ù¤ùš÷Œö}õ!oó"añ#Xð#Sð#Uð!QÖ3sDq|ÙŽ÷÷‹ö…ö |ô!qó!hò"_ñ"Yñ#Wð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Fï*o]`%øø#âøšøšøøøøøøøøøøøøøøøøøøøøøøøøøžø¢ù¦ù¨ù¤ùšøŒö}ô nó"añ#Wð"JÑ/oHt|ÔŒ÷…ö |ô!ró!hò"_ñ"Yð"Vð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï*o-((-((-((-((,((,((,'','',''+''+''+'']`$òø$ñø©ø”øøøøøøøøøøøøøøøøøøøøøøøøøøøøøžø¢ù¦ù¨ù£ù™÷Œö|ô!nó SÈ.j*&&*'(EpsÓ |ô ró!hò"_ñ"Yð"Wð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Zñ#Hï#Hï*o+&&+&&+''+''+''+'','','',((,((,((-((]`$ïø%ûø»øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøžø¢ù¦ù¨ù£ù™ø‹ökÌ5_4b cÑ!iò"_ñ"Yð"Wð"Xð"[ñ"]ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ"Uð#Fï#Iï*o]`$ïø%ýø!Ðøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøžø¡ø¨ù«ù—ø!ró#Oï"Uð"\ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Fï#Iï*o-))-))-((-((-((-((,((,((,((,'','','']`$ïø%øø#âøšøšøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷†ö÷ yô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Kï#Gï#Iï*o+''+'','','','','',((,((,((-((-((-((]`$ïø$òø$ñø©ø”øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øŽ÷ƒö‡ö‰ö‘÷ xô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"`ñ"Zð#Hï#Hï#Iï*o]`$ïø$ïø%ûø»øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷ƒöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ"Uð#Fï#Iï#Iï*o.)).))-))-))-((-((-((-((-((,((,((,((]`$ïø$ïø%ýø!ÏøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øŽ÷„öˆöˆöˆöˆöˆö‰ö‘÷!xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pï#Fï#Iï#Iï*o,'','',((,((,((,((-((-((-((-((-))-))]`$ïø$ïø%øø#âø™øšøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øŽ÷ƒöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï#Iï#Iï*o]`$ïø$ïø$òø$òø©ø”øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øŽ÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ yô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"`ñ"Zñ#Hï#Hï#Iï#Iï*o.**.)).)).)).))-))-))-((-((-((-((-((]`$ïø$ïø$ïø%ûø»øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øö„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"Zñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ"Uð#Eï#Iï#Iï#Iï*o,((,((-((-((-((-((-((-((-))-))-)).))]`$ïø$ïø$ïø%ýø!Ïø‘øøøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ð"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Fï#Iï#Iï#Iï*o]`$ïø$ïø$ïø%ùø#âøšøšøøøøøøøøøøøøøøøøøøøøøøøøøøøŸø øŽö„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï#Iï#Iï#Iï*o.**.**.**.)).)).)).))-))-))-((-((-((fi$ïø$ïø$ïø$òø$òøªø”øøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"`ñ"Zñ#Hï#Iï#Iï#Iï#Iï,x-((-((-((-((-((-))-))-)).)).)).)).))HK$ïø$ïø$ïø$ðø%üø¼øøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ#Uð#Fï#Iï#Iï#Iï#Iï%Z!½Ä$ïø$ïø$ïø%ýø!ÏøøøøøøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷ wô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Eï#Iï#Iï#Iï :°/**/**.**.**.**.)).)).)).)).))-))-))EG$ïø$ïø$ïø%øø#âøšøšøøøøøøøøøøøøøøøøøøøøøøŸø øŽ÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷!wô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï#Iï#Iï#Iï:-((-))-))-))-)).)).)).)).)).**.**.**!¼Ã$ïø$ïø$óø$òø©ø”øøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"`ñ"Zñ#Hï#Hï#Iï#Iï :°FH$ïø$ïø$ïø%üø¼øøøøøøøøøøøøøøøøøøøøøŸø øŽ÷ƒöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Uð#Fï#Iï#Iï#Iï:/++/++/**/**.**.**.**.**.)).)).)).)).))"ÀÇ$ïø$ïø%ýø!ÏøøøøøøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Fï#Iï#Iï :±-))-)).)).)).)).)).)).)).**.**.**/**/**HJ$ïø$ïø%øø#âøšøšøøøøøøøøøøøøøøøøøŸø ø÷ƒöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï#Iï#Iï9"¿Æ$ïø$óø$ñø©ø”øøøøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷!wô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Zñ#Hï#Hï#Iï 9¯0++/++/++/++/**/**/**.**.**.**.**.)).))GI$ïø$ðø%ûø»øøøøøøøøøøøøøøøøŸø øŽ÷ƒö‡öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Uð#Fï#Iï#Iï8.)).)).)).)).**.**.**.**/**/**/**/**/++"ÀÇ$ïø%ýø!ÏøøœøøøøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Fï#Iï :°GI$ïø%øø#áø™øšøøøøøøøøøøøøŸø¡ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï#Iï;0++0++0++0++/++/++/++/**/**/**.**.**.**.**"¾Å$óø$ñø¨ø”øøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ"Zð#Hï#Hï :±.**.**.**.**.**.**.**/**/**/**/++/++/++0++FH$ïø%ûø»øøøøøøøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"bñ"Uð#Fï#Iï:"¾Å%ýø!Ïø‘øøøøøøøøøŸø¡ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ xô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"^ñ"añ#Pð#Eï :²0,,0,,0++0++0++0++/++/++/++/++/**/**/**.**HK%øø#âøšøšøøøøøøøŸø¡ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"^ñ"_ñ"^ñ#Lï#Gï;.**.**.**/**/**/**/**/++/++/++/++0++0++0++"ÃÈ$ñø©ø”øøøøøøŸø ø÷ƒöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷ wô"Wð"[ñ"_ñ"^ñ"^ñ"^ñ"^ñ"añ"Zñ#Hï 9±HJ%ûø¼øøøøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷!wô"Vð"[ñ"_ñ"^ñ"^ñ"^ñ"bñ#Vð#Eï91,,0,,0,,0,,0,,0++0++0++0++/++/++/++/++/**/**"ËÇ!Ðø‘øøøøŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷ wô"Wð"[ñ"_ñ"^ñ"^ñ"añ#Pð 8°/**/**/**/**/++/++/++/++0++0++0++0++0++0,,0,,JJ#âøšøšøøŸø¡ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Wð"[ñ"_ñ"_ñ"^ñ#Kï;"ÁÇ©ø”øŸø ø÷„öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŠö‘÷ wô"Vð"[ñ"añ"Zð :³1,,1,,1,,0,,0,,0,,0,,0++0++0++0++0++0++/++/++JI»ø‘ø ø÷ƒöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‘÷ wô"Vð"_ñ#Vð</++/++/++/++/++0++0++0++0++0++0,,0,,0,,0,,0,,¥Â”ø÷„ö‡öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö÷!wô"Zñ =°<@‰ö ~öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö“÷ xó21--1,,1,,1,,1,,1,,0,,0,,0,,0,,0,,0++0++0++0++,^bšø!}õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŽ÷ ô-3U0++0++0++0++0++0++0,,0,,0,,0,,0,,0,,1,,1,,1,,»Ø°ûžø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö {õ!vô LÇ^^ÆùªúºûŸø!€õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‹ö |õ!nô!yõ"dò!N1--1--1--1--1,,1,,1,,1,,1,,0,,0,,0,,0,,0,,0,,"ÑÙ¹ú¬ú´ú»ûŸø €õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŠöŒö |õ!oô!rô!xõ!mó!>Æ0++0++0,,0,,0,,0,,0,,0,,0,,1,,1,,1,,1,,1,,1--__!ãù®ú°ú²ú´ú»ûžø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!uô!uô#Pð L$ÛÚÕù©ú²ú²ú²ú´úºûžø!€õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö {õ!oô!rô!sô!sô!sô!zõ"Yñ!9Â2--2--1--1--1--1--1--1,,1,,1,,1,,1,,1,,0,,,lo&÷øÆú¨ú²ú²ú²ú²ú´úºûžø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!sô!sô!sô!sô!sô!zõ"cò#Cî-3^0,,0,,0,,1,,1,,1,,1,,1,,1,,1,,1--1--1--1--#ÔÙ$ïø¹ú­ú²ú²ú²ú²ú±ú´úºûžø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŠöŒö |õ!oô!rô!sô!sô!sô!sô!sô!xõ!mô#Hï!=Ä\_&÷ø!ãø®ú±ú²ú²ú²ú²ú²ú²ú´ú»ûžø €õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!uô!uô#Pð#Dî"N2--2--2--2--1--1--1--1--1--1--1--1,,1,,1,,"ÐØ&úøÔù¨ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûžø €õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö {õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"Yñ#Bî!?Å1,,1,,1,,1,,1,,1,,1,,1--1--1--1--1--2--2--Z\$ïø&÷øÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûžø!õ †ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï"M"ÐØ%òø$ïø¸ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûžø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!wô!mó#Hï#Gï!?Å2..2..2..2--2--2--2--2--1--1--1--1--1---lo$ïø&÷ø!ãù®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûžø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŠöŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!tô!uô#Oð#Dî#Iï-4_1,,1--1--1--1--1--1--1--2--2--2--2--2--"ÑÙ$ïø&úøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûžø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!yõ"Yñ#Bî#Iï!>Ã[^$ïø$ïø&÷øÆú¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´ú»ûø!€õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï#Iï!J3..2..2..2..2..2--2--2--2--2--2--2--1--"ÐØ$ïø%òø$ïø¸ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!xô!mó#Hï#Gï#Iï!>Â1--1--1--1--2--2--2--2--2--2--2..2..2..[^$ïø$ïø&÷ø"ãø®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûžø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰ö‹ö |õ!nô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!tô!uô#Pð#Dî#Iï#Iï"L"ÐØ$ïø$ïø&úøÕù§ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´ú»ûžø €õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!yõ"Yñ#Bî#Iï#Iï!?Ä3//3..3..2..2..2..2..2..2..2--2--2--.km$ïø$ïø$ðø&øøÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´ú»ûø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï#Iï#Iï.4^2--2--2--2--2--2..2..2..2..2..2..3.."ÎÖ$ïø$ïø%òø$ïø¹ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!wô!mó#Hï#Gï#Iï#Iï!>ÃY\$ïø$ïø$ïø&÷ø"ãø¯ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!uô!uô"Pð#Dî#Iï#Iï#Iï"L3//3//3//3..3..3..3..2..2..2..2..2.."ÎÖ$ïø$ïø$ïø&úøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöŠöŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"Yñ#Bî#Iï#Iï#Iï!?Ä2--2--2..2..2..2..2..2..3..3..3..3//SU$ïø$ïø$ïø$ðø&øøÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´ú»ûø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï#Iï#Iï#Iï(fdg$ïø$ïø$ïø%òø$ðø¹ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!õ †öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!wô!mó#Hï#Gï#Iï#Iï#Iï,v4//3//3//3//3//3//3//3..3..2..3..2..]`$ïø$ïø$ïø&÷ø"ãù®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!tô!uô#Pð#Dî#Iï#Iï#Iï*o2..2..2..2..2..3..3..3..3//3//3//3//]`$ïø$ïø$ïø&úøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!yõ"Yñ#Bî#Iï#Iï#Iï*o]`$ïø$ïø$ïø&÷øÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûø!€õ†öˆöˆöˆöˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï#Iï#Iï*o4//4//4//4//3//3//3//3//3//3//3//3..]`$ïø$ïø%òø$ïø¹ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú´úºûø!€õ†ö‰öˆöˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!xõ!mô#Hï#Gï#Iï#Iï*o2..3..3..3..3//3//3//3//3//3//3//4//]`$ïø$ïø&÷ø"ãø®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûœø!€õ †öˆöˆöˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!uô!uô#Pð#Dî#Iï#Iï*o]`$ïø$ïø&ùøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûœø!€õ†öˆöˆöˆöˆö‰öŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"Yñ#Bî#Iï#Iï*o4004//4//4//4//4//3//3//3//3//3//3//]`$ïø$ïø&÷øÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!€õ†öˆöˆö‰öŒö |õ!nô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Bî#Iï#Iï*o3//3//3//3//3//3//3//3//4//4//4//4//]`$ïø%òø$ïø¸ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûø!€õ†öŠöŒö |õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!wõ!mó#Hï#Gï#Iï*o]`$ïø&öø!ãù®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú´úºûœø!€õ ˆö {õ!oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!uô!tô#Oð#Dî#Iï*o4004004004004//4//4//4//4//4//4//4//]`$ïø&úøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú°ú·ûŸù!xõ$có$có#ió"oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!yõ"Yñ#Bî#Iï*o3//3//3//3//4//4//4//4//4//4//4//400]`$ïø&÷øÆù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»ú“¶7F1B€³–÷‚õ!qô#hó$dó#hó"oô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî#Iï*o]`%òø$ïø¹ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÁûÅû—¼DQCL—¹½ú¬ù˜÷„ö!sô#hó$dó#hó"oô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!wô!mó#Hï#Gï*o5004004004004004004004//4//4//4//4//]`&öø!ãø®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÁûÅûÊûÌû™¼*Ua3//3//*V`ž¹ ÖüÎü¿ú«ù—÷ƒõ!rô$gó$dó#hó"oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!tô!uô#Pð#Eî*o4//4//4//4//4//4//4//4//400400400400]`&úøÕù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÀûÅûÉûËûËûÊû—»CP@M”¶Ðü Öü ÖüÍü¾ú«ù–÷ƒö!rô#gó$dó#hó"oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!yõ"Yñ#Bî*o]`&øøÇù¨ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»ûÁûÅûÉûÌûÌûÊûÉûÈû“·FTDR’µÈûÊûÐü Öü ÕüÍû¾ú«ù–÷ƒõ!rô#gó$dó#ió"oô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!zõ"cò#Cî*o5005005005004004004004004004004004//^`$ïø¹ú¬ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÀûÆûÉûËûÌûÊûÉûÈûÈûÈû”¹*Xf4//4//4//4//4//4//+Vc“·ÈûÈûÈûËûÐü Öü ÖüÍû¾ú«ù—÷ƒõ!sô#hó$dó#ió"oô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!sô!xõ!mó#Hï)o4//4//4//4//400400400400400400400500``!ãù®ú°ú²ú²ú²ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÁûÅûÉûÌûÌûÊûÉûÈûÈûÈûÈûÈû—¼CQ@M•ºÈûÈûÈûÈûÈûËûÑü Öü ÖüÍû¾ú¬ù—÷ƒõ!rô#gó$dó#hó"oô!rô!sô!sô!sô!sô!sô!sô!sô!sô!uô!uô#Pð(oa`Õù¨ú²ú²ú²ú²ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»úÀûÅûÉûËûÌûÊûÉûÈûÈûÈûÈûÈûÈûÈû—¼AN@L”¸ÈûÈûÈûÈûÈûÈûÈûËûÑü Öü ÖüÍü¾ú«ù—÷‚õ!rô$fó$dó#hó"oô!rô!sô!sô!sô!sô!sô!zõ"Yñ'o511500500500500500500400400400400400``Çú¨ú²ú²ú±ú¯ú®ú¯ú²ú¶ú»ûÀûÅûÉûËûËûÊûÉûÈûÈûÈûÈûÈûÈûÈûÈûÈû”¹*Yg4//4//4//4//4//4//4//4//4//4//+We“·ÈûÈûÈûÈûÈûÈûÈûÈûÈûËûÐü Öü ÕüÍû½úªù–÷ƒõ!rô#gó$dó#ió"oô!sô!sô!zõ"cò(o400400400400400400400500500500500500_a¸ú©ú®ú¯ú²ú¶ú»úÀúÅûÉûÌûÌûÊûÉûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûޱ@LES’µÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûËûÐü Öü ÖüÍû½ú«ù–÷ƒõ!rô#gó$dó#mô"ió*pXi³ú´ú»úÀûÅûÉûÌûÌûÊûÉûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈû’µ=IBO•ºÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûÈûËûÐü Öü ÖüÍû¾ú«ø–÷„õ wô5{511511511511500500500500500500400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400500500500500500500500511511511511511511511511511511511500500500500500500400500400400400400400400400400400400400400400400400400400400400400400400500500500500500500500500500511511511511511511611511511511511511511511511511511511500511500500500500500500500500500500500500500500500500500500500500500500500500500500500500500500511511511511511511511511511511622611611611611511511511511511511511511511511511511511511500500500500500500500500500500500500500500500500500511511511511511511511511511511511511511511511511511611622622622622622611611611511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511611611611611622622622622622622622622622622611611611611611611511511511511511511511511511511511511511511511511511511511511511511511511511511511511511511611611611611622622622622622622722722622622622622622622622622622622611611611611611611611611611511611611511611611511511511511511511511511611611611611611611611611622611622622622622622622622622622722722722722722722622622622622622622622622622622622622622622622622622611611611611611611611611611611611611611622622622622622622622622622622622622622622622722722722733722722722722722722722722722722622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622622722722722722722722722722733733733733733733722722722722722722722722722722722622622622622622622622622622622622622622622622622622622622622622622622722722722722722722722722722722722733733733733733733733733733733733733733733722722722722722722722722722722722722722722722722722722622722722722722722722722722722722722722722722722722722733733733733733733733733733733733733733733733733733733733733733733733733722722722722722722722722722722722722722722722722722722722722722722722733733733733733733733733733733733733733733833833733733733733733733733733733733733733733733733733733733733733733733733722733733733733733733733733733733733733733733733733733733733733733733733733733733733733833833833833833833833733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733733833833833833haxe_4.2.4.orig/extra/installer.nsi0000644000175000017500000001216714146064214017243 0ustar andyandy00000000000000; Haxe/Neko Install script ; Instructions: ; - put haxe files in resources/haxe ; - put neko files in resources/neko ; - run ;-------------------------------- !include "MUI.nsh" !include "LogicLib.nsh" !include "WordFunc.nsh" !include "winmessages.nsh" !include "EnvVarUpdate.nsh" !include "FileAssociation.nsh" ;-------------------------------- ; Define version info !define VERSION "%%VERSION%%" !define VERSTRING "%%VERSTRING%%" !define VERLONG "%%VERLONG%%" ; Define Neko info !define NEKO_VERSION "2.3.0" ; Installer details VIAddVersionKey "CompanyName" "Haxe Foundation" VIAddVersionKey "ProductName" "Haxe Installer" VIAddVersionKey "LegalCopyright" "Haxe Foundation 2005-2019" VIAddVersionKey "FileDescription" "Haxe Installer" VIAddVersionKey "ProductVersion" "${VERSION}.0" VIAddVersionKey "FileVersion" "${VERSION}.0" VIProductVersion "${VERSION}.0" ; The name of the installer Name "Haxe ${VERSTRING}" ; The captions of the installer Caption "Haxe ${VERLONG} Setup" UninstallCaption "Haxe ${VERLONG} Uninstall" ; The file to write OutFile "haxe-${VERSTRING}-win.exe" ; Default installation folder InstallDir "C:\HaxeToolkit\" ; Define executable files !define EXECUTABLE "$INSTDIR\haxe\haxe.exe" !define HaxeLIB "$INSTDIR\Haxe\haxelib.exe" !define NEKOEXE "$INSTDIR\neko\neko.exe" ; Vista redirects $SMPROGRAMS to all users without this RequestExecutionLevel admin ; Use replace and version compare !insertmacro WordReplace !insertmacro VersionCompare ; Required props SetFont /LANG=${LANG_ENGLISH} "Tahoma" 8 SetCompressor /SOLID lzma CRCCheck on XPStyle on ;-------------------------------- ; Interface Configuration !define MUI_HEADERIMAGE !define MUI_ABORTWARNING !define MUI_HEADERIMAGE_BITMAP "images\Banner.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "images\Wizard.bmp" !define MUI_UNWELCOMEFINISHPAGE_BITMAP "images\Wizard.bmp" !define MUI_PAGE_HEADER_SUBTEXT "Please view the license before installing Haxe ${VERLONG}." !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of $(^NameDA).\r\n\r\nIt is recommended that you close all other applications before starting Setup. This will make it possible to update relevant system files without having to reboot your computer.\r\n\r\n$_CLICK" ;-------------------------------- ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE "English" ;-------------------------------- ; InstallTypes InstType "Default" InstType "un.Default" InstType "un.Full" ;-------------------------------- ; Functions Function .onInit FunctionEnd ;-------------------------------- ; Install Sections !define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' !define env_hkcu 'HKCU "Environment"' Section "Haxe ${VERSION}" Main SectionIn 1 2 RO SetOverwrite on RMDir /r /REBOOTOK "$INSTDIR\haxe\std" SetOutPath "$INSTDIR\haxe" File /r /x .svn /x *.db /x Exceptions.log /x .local /x .multi /x *.pdb /x *.vshost.exe /x *.vshost.exe.config /x *.vshost.exe.manifest "resources\haxe\*.*" ${registerExtension} "$INSTDIR\haxe\haxe.exe --prompt" ".hxml" "Haxe compiler arguments list" WriteUninstaller "$INSTDIR\Uninstall.exe" SectionEnd Section "Neko ${NEKO_VERSION}" Neko SectionIn 1 2 SetOverwrite on SetOutPath "$INSTDIR\neko" File /r /x .svn /x *.db /x Exceptions.log /x .local /x .multi /x *.pdb /x *.vshost.exe /x *.vshost.exe.config /x *.vshost.exe.manifest "resources\neko\*.*" SectionEnd Section "-Update PATH" ExecWait '"$INSTDIR\haxe\haxe.exe" --cwd "$INSTDIR\haxe" -x WinSetup.hx' SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=5000 SectionEnd ;-------------------------------- ; Install section strings !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${Main} "Installs Haxe and other core files." !insertmacro MUI_DESCRIPTION_TEXT ${Neko} "Installs Neko, which is required by various Haxe tools." !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ; Uninstall Sections Section "un.Haxe" UninstMain RMDir /r "$INSTDIR\haxe" ${unregisterExtension} ".hxml" "Haxe compiler arguments list" ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "%HAXEPATH%" DeleteRegValue ${env_hklm} HAXEPATH SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SectionEnd Section "un.Neko" UninstNeko RMDir /r "$INSTDIR\neko" ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "%NEKO_INSTPATH%" DeleteRegValue ${env_hklm} NEKO_INSTPATH SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SectionEnd ;-------------------------------- ; Uninstall section strings !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${UninstMain} "Uninstalls Haxe and other core files." !insertmacro MUI_DESCRIPTION_TEXT ${UninstNeko} "Uninstalls Neko." !insertmacro MUI_UNFUNCTION_DESCRIPTION_END ;-------------------------------- haxe_4.2.4.orig/extra/mac-installer/installer-structure.pkg0000644000175000017500000040772314146064214024032 0ustar andyandy00000000000000xar!H"9xÚìšKoêFÇ÷÷S öÄó~XWªªJ•º¸jÓÍÝçn#Û¤I?}ÇÆC Ø…D¹UVÌxŽç ~sæ›èëór1z²Yž¤«û1¼ã‘]éÔ$«ÙýøÏ‡_&büuú%zVÙôË(*Rí?F‘ά*ü“"YÚ)O€œ@ôHˆDØ÷(8´©îš[ý˜o–£¼xYØûq>Wp\ŽŒ¢Ô¹ÜSu«ºš'ÿ”³GAÕ(§š9ªžKv”¿îfݵ RR.¨YÈ(Z6fdðCDC,½Ùro¦Î̦öf³,ݬ§¯£`ÛÜ^MÌàW_¶ªK›Üf[»ªµ½¶3Û4fËÔØ)à”úÅ”ÍꢱO‰¶«tÊ…8 výj4Y•†PÊð÷mûÕPñ²¶S“dViöU¿Y)ÿ ~·yºÉ´Í£ êW#{aÑVؾÊö•¶¯¶'ÄíR·SÞ.}»¾ ð‘Ĭ-ñk‘íên±ÎÒ¿Z·EƵÈ~ ªPu{-ìjV̧æ—S÷šÁf—6›I­×‹DW;.Hua‹I^ø¸»[ê­Å9Áð`£íöZíªÙnÛ*ÓóäÉšI÷öÅÄ/¥1$£b¥(g b€±SPBA¬Â^°Wí¿Ës‘)¿æë}¼ž©Q6hIÛæÍe4AžfB‚#š[87رÅ^µ »yèN¤¦!m¦/AÝ¢šHF©®±.1m]#ý[9MnˆJÛWt“³tCJˆ¼!Ý $I7Þµ¯!x3# `ÈJ”ÃŒZ&P }èp1BB #•¡’ªkðîïã-ñ¦D© þ_âÍà+ýX~•9Aø¾Ùjí go›ý ìcç#dH>2WÏö!MIñ-³n‘ÌæÅÝúqÖ™žð&;iÓ_‡DÅQXUš ‚9àÇ1¥ÎNK/­€r)ž8G@NÂÄ g•a‚*kÄ•ÀjˆÊœ÷T<¹Nú»8NÚÑä¿'~5œüTâ×a÷>‰ßQéø•1u$~Ç!d ò7AÔÌþºri›ÝVÙa,Î`Œ) ì† cŒ:A®ý @Ùj‡­åFútû&Ü;„œ0PŒ4A±ƒ–ÆW ÜßÅ» Ìz¢Ì~”Io”J——–g&’ߎ`Ž0oÝ ¤•¶Âб,f•´š`"eŒ5‰}ÉqÀý]|<`Úà?t–¬‹üÄœ¡˜óÛ1Ì1íN'J'Ö€).¨B§„ñ1Ü $Ž`àÅu΋+îïâ“àÁãÙÄË"U¦“à®+@ø¶Âë*@:Ìz<å»ÁC RÂüdÅÏUÝ,D@ewÁQ:"8WÔ`ê¤d,f"J‘ÕJ ã”6-¾&Dôwñ¶!¢,šyHð¥Ѳûð!‚ˆ·(8ÈÙ‚ƒÛux¢Þ¨Ü 9챈}ÊT,1vŒ#ÑÖN+ À0¿æ°ëíâ];Ñó°?ÄanYoÐsqݰ`f‚t—•—øbãb…cì§"f¾D"_‘œùêÖs'¯À·¿‹Ï'?ƒñ…7©6ºrµæåuKúæåGïF“Ü€Œß­7oD*{Š/Al° JI#e¦F#€„q&%ÒCgœ‚ú$ÄîïáÃ-„¯zü.B.<~o™½yö{ˆnßì·Ì øëì÷ˆÛ-¶?'žœ$Þ”(íÙÝëíËDAõ_ÿÿÊÊ`ÆC2«0"{¢{ê¡ìB£Ks Haxe Toolkit %%VERLONG%% #haxeToolkitPreflight.pkg #files.pkg BOMStore 4ÏU¨#"<nfotrees treetree€. dextree AíõS¡uîxBomInfoPathsHLIndexVIndex Size64¤õS¡uR'*~ ._.DS_Store¤õSŸvvˆì.DS_Store¤õSŸ³>Ż«ÓQhaxe.tar.gz¤õSŸ³’,M]9neko.tar.gz¤õS¡b«çèVÑscripts.tar.gztree@TïÑ ª4³66q K"¢€"q#^"†`f3^3y3‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3Â3Ý3í3õ44 4(4C4V4ž4^@"15"¡n 3º 3¬3‘‹íP½‚0dæ)Jý:;8˜8_) A(¡Õž^@DÐ.ÆÍx¾Ÿ»ïÒæ¸{S¸˜{^[¹ïͶwpJw]:Œt"~u#ÝÈP(Ã#íëÇñ”ú "!ÓBéð|†*±:¤R‰ €t^¢$¬c;ÏDZKQ†QÖ1C§Ã ¬šúzöBØnà©™EœI#¡¢*-µzpQ’K–5ôü™­.B™·4ègiø³4J©ôàýa0l1o§ò}°Þî6ã8ÖßáÌÛ BOMStore 3^Uˆ#"<nfotreePaths treetree€. dextree AÀõ:OÈ€DIndexBomInfoPathsHLIndexVIndex Size64 ª 66q K"¢€"q#^"†`fn "1‹í< X“GÓoNRÀ0JåÊn”+"Að*Ƽ@$$1 劷TTÛª`­U𨭠~"‚g=@𨢢¨Uª"¢òí&A"þßÿüOû?ß“ÑÍÎÎÎÌλ;;»/ A]QøOœPWggP»º8÷£ÊÁÕÁÁÑÕÉÉAÑtPb±GÐÚèttPmôÞnWðß uQVæä(ö4a|B¼Ë‰ˆXB!rîÍ“÷‚@Áƒb‹&‚d#àn 0™¡>Œ9Œ°iHè#Ÿ(—ƒr3³f ÑïÃá¸jŠ‚ÈÆ‘`É’>öòž£ä`¤§ŽÜÖ@DÒûdÄ) ÑS,IŒDÇ!s1‡µžÜÎ^ÐT“ëP—ëÂÌ8Œ'ÄDƒèh &ÂZo€jÊv°Å—û‰g1&#H ¬IH?PÖÇd&ò“¸|“Ë ¢£ è˜ë:”¡o-ü}fø(uP¾õP¬Q^ ¡H+b%0±DâÁ塯@Ù~sÐÏ~>¯w9„ÑG:Œ€MXСÞÏk(£vŒ CCQä:Ø1Ê‹1P t °òYØ‚„¿¯Ý_Ç|JŸk+ëÀ À§ÈÖbšïW~Jpp(LAú­±olž˜)ÂbĽíåá¾)´…Ž Ã@ý Ô9ªdKoüZȧ¡Èë Ba¡MÖGK‹hÁÙl*kÀWŒBxN#áâà öð6Ä ×볇XÄàeðáq€M ÷I”€£˜‡±ÄX¨@ÀCX<ž€pùà’15!ÓEF…_x3™L¿É~¾XÂâKÂeÙÕ~<–X†Å`"ŒÏÆtÓj¼N!Ð!=Ü› “.™ âØpŒÏA ÅÈ›‰%s%§\4Hb`ëKcof&™Š%K‰j ¨Jy¢YÞ¢Ÿ@˜âÏeC”%J|ŽÉLˆš1v¢cÆa,h²É§Òºÿ×pÔt"Ò jOP|,5˜+IÂéË~@s5qŠÔc%|އéíÈ%<_ŽËRÞ”ã²Ôïr\–Vq\‰~F ‡¹Òðç20µ  m¹‰ÞƒõAl†ìeëÆ+Èä³0æÇ)0ƒ°(' \³Ï¯Öç]Hî!ý}§×S>òK‹#š@£9»ÐœÏúæ¦N5ðr˜÷Ó›žS§¡?´ÊWg x`»ÁÈŒ)·¨‚LÃm#\_: [`Ï y˜}ÿ¿¥qúnaØÂ#·f›lÞî~Äã{«p4c0ßqIÜœ|½"ž„Ûº¡]H^N¯-%]™c³þÆÝ­Y/#'wÅž%zÉ2ª¨™m}Õp#¢óÛ­ªáÌý§gq›'Ÿ÷&7ñ+ r›c'ï<”SÇèì2öËþ´@î²ç„48”“‚¦®x“OÙåÞÜxImhºº–uΔœN]œ¾$MÇãpôa¨–ºš?R Qf%™º¯ÐL¢š‰ï*!àqx<ÎÕýÀ‚SÑ2„¢úp|D8}8jÚõa2F ä³íéãP*$n&'úa"˜,%ÏP¦wŒˆ¸’º1jùÃuå|a„â烚›è¢®¨ÝÉNw§»Ï1Ñ¥;+5Ñ´ÿCQºÜkŸ€ƒQ¹±|àÄŸB3q–Êó‚SC™8èÚøLÙ¾Ó`a^×°ø×cu7eDÅÏþuΨ¼ýî==ç¾iŒ³û”måVMO‹)Ï8nšñ:?œo ­2S?9÷yÔÈÍ3°1-úžÛ¯8}Ž(!•À*ÖWw·=û¸-µeÁñIËß6TŒ. L1ø6qÑ=óC.iOî¾eº¨tÕŽ]gVÿPõfã¯î»ÏŽ 5X^¾àI{ÌJP…‡ÝŸ»\­[nÇ=¾ÃšEkÎÅÿUjq8x›Þë®&»3"bšÙü7“–ïo(ó~j’k:}ÃÑó­v{Ž?œ=5j4æhEØ[¶–š[››‚?µi¿ÞÓ³\͉ùSÖPN¸†þv¾±õô3.˜iq+b²Þgã 8W–qÍØ‡êé5#áp=D"p©Ô¶Ç¶ª­®i£ÜJƒ@@I>ÒÕP¨P3HÐ#Vr¿?™ä;•ø]¤oñtrÎõK”UZ(v!š¢ÆéF6¸ëi½_`ïý}g@Hšæ<Ô2‰4Ôµ)_b•36N"‚À’””¤Ø:`Ñd›Eç³g‹xž×³”}l]°hÄÅïƒ fmYzÖ ¡¼¾£ìÂQ+ôå/òíS{XÝfgDnÑZÂÓ¯iÚ}•ªgÖÞú­¼(îY0inqÿü¾›å¿º7ÿöÞªæ=A“NUO šÈšúúJúâs'››UqnæÊè·Ö“·œîü)®¼¶Óu’›v¶›oMÔÝòoß‹\6Ñï™öå“ÃöXYžU›iXchï"Ô1ºgëQfY'»–íÉçl¿~·Ü¤ÒïýærÌxŽá¼½6v/&½÷M®)O ʽk¹¿‚‡üaˆ/<»#ë……_ÐLB™"(àÿ© à‚:98ƒ@€:º€ à‚ê®hþ-6|nß·®Þ¥E^ÝlÚ®öd^Ê2»v—í3ƒ#KGäÝì â½Ô(·Dñm¦_‡jýžæ³sS×Å31ÅÔxƒ e¿´Ž²>A^¿u±ÎŽéÜËÆ®Žõ'I!猸ëFˆ^Fé]IcnîK8±*$J÷9ÇyÌA_Ì6Û¿®óUñÖó¡Gjf…Æ®Ò<@鬯°¥„U“phþA¿ó¤-^Ù~9òôûs•‡õšæ¾ZïU9aÏ ’²fØ> c{ÉOÝæhãò²…kÂ#jöÒ|ö¿î¾+<{¿,˜±”ºÁ'ï¤$z˜~–O®ã °›g=žCtÈÛ¿Êì&& l\´ÍÑ+MZWg'ß÷™¸Å`F ØùêCíðA7ðgwx&®±…˜‰Ó "(ˆbuØ5šÑZ÷F<ÎØîñ'šqâ3ͨ™±? ãqYàþBÞ!‰ãŠ)ìƒQ¢S(,~ EÈI&'&`b ‹ÍÆ„¹L Á`áSXò¿Ð‰¾/I–ˆC‘`¢ ÀçPØ>‡ ]P …Řm¿„ ›"çìç°B ÜÁØ2L–°l?XøúÚ¥(Ø.ùà“üÍ-%mîXt) VCÎÎÊUäàÚ±k³÷JÛËû {!Þüô‡TŸ2Í©qûÄ®äžøÓ—¸gIÃ)¿»ÜwìÛiÚñ=6ogÿ ¦•jâi`.ùý tŒG@ÙõNûŃÂ[$ÆVgž'$?yPib²³e©¥ó™±WšHWã/o§Ž1è,­X%ΘjÔ\-ÚšŸ_ûOy6ßmë/½ÆÅRV8.èÔÍ<³½ŒÖ¾`.§ší˜Ô9AÃ6²ý:ÉBïúñˆi•M.i5¹M?vðín¼²pëÒÒ°ƒ£~]ëK5´®%™U…ÏcŸJ7 ݽâÊõÖ·´4\JL´@3ÕÌASW„/ÜÀðõß'GÔÁÙE~ᡃ ¼‰Fþ 4A¿¨''† b$I,FšÈ-Òï%õÚóÙxv4DÄŸf;V/fÑ¢n8îøi*¾üe'§o_zü GU¦øVšÿüó'}®>ùm¥ûzú›-M‡Z½ªÖ¾ñ!ÈlÍo7ÕÜ/Züsî¸K•4â8‹@~-qQ˜Qž%i¼Ñ5}»ÔG©Í1;¢ø)&ÚOî8xpÊ&Xï :Ëðq›ïµ+:Èd³íw#ó2¼G=å¾iãÓµ¯¿I]©öDz|É’á®U÷‹žÙŽîÚ–À¿Üýh,ùÁ6—ÚÏÅ^ÈKü¥Š Â;ƒšOÔ{Ó¾|ã‹ÒÔo «ËX_m–0®%YíÝ%ºšnk²'Òñ„áóMsŸ4½'›…íýq—wgDóµwÛ¾•ÐÏÀŒœîÏ4ÒQñ "Ÿ¼×ô¹aGÄ5ámÕÝ¿³Ýˆ.~;ƒ÷ rƒÞsÀ‚ô9uБ©§_Œ{ŽŽWŠqfCÞqþKBœ—üfn¨C ZbŸc;äS³ÁË=þS¼"›¯™Î#ÖQEÖì=êÒŠËÇÿq$ë}¥í«7!© ¼ç\âý´Æº4­|vãAÝâÒãg©7$þôøi~ì%³§\Ãnœì±½=(~¦Óë?ÿhÙHÛ÷UÒpû©?¥R(h7f<üñ–Eƒ¿áµ¢[3I¡éãÛ[î¯æÑÑ©[ü‹ÖÁ“‰kü,OW‡’®V§Yø>í\YW”«ƒ‘Oy—›ßßô@Z¸ð×ÕKë5ƒOï`å§ü‹ôè¹ûêº}ƒW—ܳlö¼lfñ¨c÷úèmÝG§ã^l*¹ý]OjùÈÅÒ ®íM=;"Âë*9!¦ñ¾¸lµ:ŘÕà±TB2¯Å«Ó#Sê2虸 à\;apÌXöDh†Ò[jÿ6’ºÂÀCÚZqü°MHdó¼ÝXiAŒÆjê./ì˜eOèÝNTÓ'¡™Ðº~ƒúƒô©¦¯Fïm][gðÄ9VI~©fõºxQþíçÚ_ݾÂvsÁ´‡!dñÁóGQ{pFÎdýÙQãë¿~N œßÑXq£¨go}×v­w~ÿÚ{kVDÜ Gi–~gØe<«å7_ˆ¢nùÄÞ¸°iÖW×ÐìYo"}ªÞmåÛ¤6Ú&7Nnh÷Ħtù­km°Ý¯U•½‡^Y9á¾þ­ˆõì›e‡ÐWeM©:nM£Zh´šdœ†©½æ]õÛ¼‹—cJ¦=ÊÀ¯Ëx²gÌFÓ£ôïÜ:šïï;ØO#T ü…¾ûÇá3ßýãàˆ:;: Î.²¯¢;}sr°§ EX 'AÆXÈ¾Ý šË§aüE”h–8N;4($(4Ðò´0ŸÐP/Ë_d©­Æžá5ß’ÚÕ’bÇJƬÕ|mn e.…*ç¦ØÅJ((%ÊCvÜkkõê Ïåñ(v޽¼óµc¸ÚÚðg¾Tû£'wDúàTeöa>ÁŒ0 ‹¿gÕþ Õ@J‹307Ad`å››™"‰Ais##cs#4aÐc0@7ÍÐ;À.nhŒÄ rôôq RTTd4Ýo4ËHaxe Licenses ------------- For details about Haxe Licenses, please read http://haxe.org/doc/license The MIT Licence : -------------------------- Copyright (C)2005-2012 Haxe Foundation 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. The Haxe compiler GPL License : ------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS The Neko LGPL License : ----------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ‰PNG  IHDRúúˆìZ= pHYs × ×B(›xtIMEÝ;M¥Ö IDATxÚí½{x\ÙYæûûÖÞ»j—¤ª’¯}IZÝV‡Û —Ò3À0ÏáÀdæ<œBÚÉðÀL i§d˜pKÂÌIÒîvÈ…û%­Nx’ÃÌ`î¤Õa` [KÝr·ï¶TUªëÞk}罫$Û²-Ë’\%¯7c¹]²ö^ë{×wYïúxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxì Ȱ<ˆ~6F¾¼ƒ*è''C¢T¤˜ŽÊ8*ÆXyaKõ‰r_Û[Ö ælŒì ³±á(<³=W › ùTœ–cN›oº›ñÿô´ŸÌ5'XGøÙ/†:ú—úDÉOèua¼šì¡ÎÆfßã)¾ß{ô+Nò߉|UKU)ê''ßDœ„RLʨŒáDɻꉇáÙ5ŽÏËÁÎÑÜ@‹ˆôä¾¶ê§"ˆŠÈ×.{_m?Áø.ä+Ï Ç!’ƒ®ÎÆcÀ€;†&rS@†H…Ð E×ug g“ªŽ¥O”~~âçj­·NÉØÏ. ëž°è®A¸[ÑH_L£øÏ´QìJÁž£˜ŒIä°‡áôúVgãü˜ìü¿úxÁèl ’Ê×.BQ5˜óÓ_…|ÝߣŸ^BgãPvR «³ñ«€·wßôE]/qƒ@ëî|ÁÚÓq;=OÒ5EíÈSɼüPKž å’ïôD Œ‰Èž^¨íX)j'¼“N(*šº³¦˜*…4À éàùÀÇu6þ¯Àkä`ç)-UvÔ“}í\œðs迎gD¶R-þ¯ ‰ÏÈmœ4ìÙâ²}¶Øs…Ц&&qÙBä–$•X²tÃÊPõÐ:´&Fnë´ôdܬlÄT"’`ŸKÐ"è)â$’‚íbÜíÈ`Õ¿™#ì€oæt6~'ðN9Ø©Yqé/ È×÷ÐÇ‹F·\H¯³ @¶ÑO!/l­”gž(îÕÙøíÀ¿Ëéå€íÏÑskÃe!º¦r.=cO”·íÊHþ9Í¿#ÿZk¤Rα¾Šæb!åÎî~"—Ð3Ñšk¬ êävZ´) zV iHœv$p»"DA0è¶ßäš?|¿ÎƯþ@vê9ÉE^ÔUèÞ2!½~(g»:¢³%‘¶4÷껀—£¼ z@´m$@T,©¨Z1Ú NÛ“q)=Uj»Fp‡¹G7ƒ<].‹&•D[R–qužèë÷’Uв§WÓf¸g -U¢ ìÓ^Ý…¦D¶F!$²!FÇ1š"‚Ûî $À`øS}<þŸ–ƒ¦þ¥@T9ØéûŽ%¼>#/êmt66r°ã U«À7o¾&'¸ÍÇnë‰mP¬tµkBz¦kkQÏž)&îT\p=s‡ NJÑ)*+.ær{T@´Á9 UžèëBÑCÙÓ‹Y“kYQ 0®©')¢J—Ð6$r)[ã”@ —fÞC¶²\åÏÕ¾ áO€_ÔÙør°óièh¾ç„¢ˆÜ×ÝÿTùº.ò¢úx,ŒÜ×±úg§ß¼øîüã½-!¸®ZzB  Àj;°®®Õì¹bÉ/¨¦²K"…@‘ØfäVÀ‰\ógp ‰¬Yn>¼D/8HÄIÙÆiƒd]YÏå«lºq¦¨ÚèyBk$tB'XKè@˜Lìåe˜õ…ÜSü{àå:~Mvær"’Ê}mô‰2r_cä‹lr°“í‹ ýJºÕÇãç#é÷ç$òÇlÉ5÷¸Ù¼dÕq¡£Í q‚h=rn)»%®M Ü&B¨HäúäTä:ç8Õ†(‚ fÚýšÓ%ˆ:¡ìêuõL±¼A‚­ú“f“ ì¡ Ýp £ËÙ6‰ƒÐ-IäB›`tw¾W*¹Éláƒü÷¨ÿx©ÎÆ¿ŠqÈ ;=-†:;¹¯áF5”×÷‘vÐÙb!SýT±‚‘ïä·›`+ûÚ¢B¨`TºY·T»WÅ5"§­`ÁH¨HÑ­,æýùÞ¨µ¶åÊ~„s ‘6e¸‰Þ§©Ùßíééb–OÝXQM.ËÑ`BSi]íh *FCW£`U"›¸2J<ÈÑ.ßQÝÈxkþëùÀÿ3ÿ§ÎÆÇä`çù7,€IÕÙrp4ä´úx yQýT úDÉ}^þ>?¼xá*‚›U‹ßFÉ-ˆ BèÀÉ{¦PrŠm·T¨jËX× Ñž)‰QÁ Ƚ27JÊ~Ø^Ë7؆XÙ%Éû«l5©"tâÖý,ˆq‚ZÄDôB§¢*F-…ô”l‘È”ê%¤— „ø²²”a€o¾FgãïÞ,;¯³ÅHgc'ÛVgÇ‹ÎÜ]Ÿˆ¡KFòÙ8Ä¤È {=-~#ÈÏ퇯³`ƒÔÎÈmrÏ:K;¨ÙqjOÅ×ËÚ3‘vMA­Åd ºDîòœ}“K¯Ú¡×ãûŽËdrR—¢;6)g^Ï"öÃAµ¢¤…‚¶Õ t%²ç)¦©Ò°+'½lðÙÌ*ó+/¾^gãCøF9¸Ü̼»Kä`Wu¶Ršü]ÿ*†äÙá}<Žä`§§=¾GgÍ{€ïÈÓ”Õ‹¢\¹sŠçä6 KµIOÆ%{:vÚ v«‹A%Èë2¡„ÛâZ³t°Ç)RöÝ@”w‹=§ìí†z¡)çtÛŸ!;=•iJÚ cº! BdŸ•È–%Nëˆ>wSÒ ˜~ÒïÒÙø'ä`çƒ:[2Ù).qr_c(¶âô‰¹¯ƒ~:FŸˆ *ÿ¼ÓÓÙø `¨^£Xzm’K>þâšö\qÙž,‰=],ibîDûá;‚®JǶ·–dÀ-K eèß ÿÀÝI„Â5D 7+±H‚çh ­B£‹RL ©HèÊ@|ˆ»èlü èÊÁÎ_¬~Ñÿv…ôúDœe×ÁJ,/ì8¿Egã÷ÏËS’ë{wY{#X¹žŠIO;îL¼å¶ËÔh7ß*qKÒX¹x¢o›¤’§ŸÜ…Κ$§7JðN¿Ë‹‘ƒm—‡è·ÿx3p/™¢­ÿŒ«‹h+j4£JjZº®X­E]{®ˆ=W4šH_jZ–’]‘šfj´áõ’ùÞ6(öO®y¢oFÑ#rû(ÙER³{ÈÂ÷õ_WBwÙ¯4BÖ$²ŽÀED®&Æ]£“—¨ô”•ý÷ðÀ¯cø‘?»÷÷ä O8}"ŽPìŠ×-^wþÞoƒ%;Y‘M1r°“êl/^ ü«üãÙá“Õj4CušÒZn1 ]#´®V°n1JíR!ı{ F‹æÂ$½¦ÔtÈæW KKL^ôDßœ<]­ìé¥z²tsªï›Kú¾aTµ€† ,k`ÉBWÛ’ÈumH E”âªm¼(çÙvÜ·ñ/þáQß'÷uþ*÷ƸTv¯{”2 nIP å¾N’{ño jŠ)@j*–µâjQ×.Æ´áꮀ¢ƒ=íµÔh2R3j@;´°T€‘hwŽÈÀŠìîôøX&Y1»¸bˆŸ¥˜À´+%5N%ÐÀõˆlK"ë] e,÷€&WUÀ÷ÿ»ÎÆ~VvÎèl)ÔÇcÅ9‹1× åu6Î|”j€s"/ê&ú7ñXÞ ¼ Ø—Ó"„¹l îÎ{¶º¥‚ÑfPt­íEDK€rr¯íÙÉ£ÿ&Y~žjJš«ê=Ñ7˧SrEbw'{G$|¿~ògy}„J¤‰@DôÂTEÁ¨•О¡hC)¤‚²kU^ÙA‘ëlü>9Ø~×À»+©~.Vj\Fx-í,Uäà@¶ú&,?„r בçžÛXNÙS¥1{¶Ør‹…=Ú3EíÑT ’ub)¬¡FÛ)s•…íhQÂ0"í+ÑÞÐERéôB1 •LžkP ¨€45ÝPTЏ“RLKRLÛˆÞ‘‡÷÷ïÐÙø{QÞ(;¤OÄuu¬>Qçò;@¶ÈŽÊ:ä`·§Çß¼ Ç—a³`ÖÑN§ÇK…ôTì´íS+Ê*a^`›ÔhC1/®Çy×#%þŒÆƒ*PPË®¤ËÙÝIýzü~¸rN:¸]“@t¹X!Ð ¦t)Ú€ÐíBùj„ÿ¦³ñDZòZùºö3:[ pê²î6 ‹>^2r°mõ¯ÇîÖÇã÷!|{¦F£ëêá{"¶éÉRIÛæöAôÐ/>Ý 5Úäç4‰I$% GÈЋŒÛ26PÊxÈÀô¬ìví´£‹R°NŠé2¡ýVŒ>­³ñ;’·SN;ƒ`úë:“ëlüã¨û œ´íùÂ3öDi<=S HÌ~Œ®ü$ɲٖŒº¶¥K!Øân8·$ÑHÑ*åmD ŒÐc%î@e—vC´îÚÙãí%2ß©ç ÿQÿF¿ûuÔ| ~Ú)Üžˆì…âw „-®VüP¯¶ÃeºÄc£ôØá™1”œRNSjÑEšk‹|íêòWIÓàn’PUùR ö·Ü¢ü.a@÷ï'_â.B‘ÐÝ-ÑЫцÛw×7j£ŽÔÓÆ(§ŠÐA‰½å]•ð«<½ FEÛa==U|©k…hS–¥èvåPuèÕhÃ’ŸwP:£p^íòG¥° ³Ž1ÛóÞü:ˆ/ ‰©¥'‹¶‚PJ64“6@¨ádØ‹ sTÙÓŽ8\ÞÛÝ}ëˆÎx*2–†Xo›ëLxÐD–Ò¥@;A™P+B@Å”]€aé¢ßãÊqR‚ÕvÎõDßZ³c"í!ô¼õ]s´Ëbúl)Ò®L äÃý*zÈ„©¸a†½ëÙäç=A[’2‚w¼šQl†rQtΛåUcÁq!yf¬ =_“ÆÙ)¬ Su„ ¬ô²ó¸–©¦TG1Ñ1#8ÜH%iKlÓU=.¦¯Áq>9>H~õO›ª‹Îf`º-vg]‹DÌhî÷˜‘4ã˜IJ6ȯÂó¸4\w\HŽ•4‘±u{Ø©ºÒ*Ïîɾ:lOÉïùc$‹—f$ÙRM„.ñæx‰IZ“ãcEíÉØ¬aÌT]qUÎî±âÑ•6…‘dÌH]H5)ià-pUýÂÊRòl)ºf¸~5Œ›ª‹VUã=”Ô5åÂĨF:£¹>9 ìŠ®çóôœä‰Ô’gãP;ÁÄ ùâ~®ìB 51‘€—¥”W/Ä}{Ã÷ ™ì51šz’K-9íÙÚfdú!¦ì ';ŽT—I÷£{¢o£q;Ý=!PãIíåMm³•‘½< û-¸kGê(#ÝðÄŒ¬‰; j „z+Êa³7Ne)9›NòËÉ`d×[l¤ÕÕ±Œ¸;1#nì©&[ì å@ñ6ÈÉ·²aæÅ º%n½­7£ 1£®.íuÊ{z·Ò‰é‹o]3Ù†®¸Yn™b.`­Âœ‘ªIŒ•áôéÉëC­xÛ ²¿‚N€Ž¶) ®¸dASá—«3súýÌäcóXk=Ñ7ƒäRm`¤Âyà½d[mkߘPM•ÞÐ…ï+Š7 1Ìf×[†YA—]‰Ü¡'Á5NA~hrfî;÷ß+]#®qÿ&›÷D¿anT²[2úUP©ðûÀcW á•@ŠvŒ±´3D÷¸ôoµ‘Q¼mÅ"7Ì :®-¢ÉšR«¾ðçxîhè²ïÑ9zÁh\-0ê’f–«k}ð¼ϲÖ=a ”\"Õ4’ê{_ñ¶´-=Þ†ìCÚƒNKCºfØÞ7¤WgæþgíÐt89ó¤[<ô%ìùÐ=Ñ7mªYõÁiP*|z•W—Ëót-2‘qânrð¾²Ož)ÞÆGRñ¶£2L :íÑÒŽrÅmµ/ ülþµ˜L¿02CnFéI¥LvuC–óýð¹+R(©%¶Ë71|_­x+îè-´ŽÎ°(è´+¢WÞ”í¿P}t®V;4Vgæ´vhù(žè›>å¼0WEµN(“4€‡X«A…ÆÒ€ñ4¸IáûÎU¼m¾Þ|€v1ô®Ødô Õ™¹‡j‡îPµÀHì¦G'/ÌÕ%Õ:©ð~à®Iô’³7ÏGìdÅÛÖýæ)è,MmÓÆÖ°¤ø±|ývã¯dÚ®|=ê¾öudÛmî"ê(I9íjs»½Ã-¡xÛlÜ, !m¹ôJd—[Ú'ª3sP»ºP™³8;’Ã;’f¨µA® UzZç×€WåE’`ðfí áþ±\ ÙŽ…xeŸ<ÐN0ñW‘^÷ø¥,»†±XªÛbtYšv^zv­ú›ãË€ùÔbQ­ŒÀžùŽðè}¯®5  §5 ÀëFžßé`=.['±K¶%|¿o[QÙØn’ÐÁâØµjaIÈÎT<´ëÃs_p »><§Ý±ÂH¯¡£iš5Ò:F*8­ójày_@Q ˆÎÕt¡TÊÛönµ'7·¤f³Én€”†k‡£º¥ó–Òµ'dYë²3˜5 4 î€UÓ¨F´–”™|lnd‡ud¯dÊINNòøUàoÉŽ:Á‚Lö N·ˆx^ñ¶äÛFZB]–~£qÉE¼±<óÔ¢V~óìH“|¤‰5¨°R!!+ÌõC¯l]Þ•F„ ²$÷Š·­"ûö(è=j¤TòØÖ‘u2ú(¨ÎÌiýБR3ê/·Êñ×À¯ä“•æFS•JzÑtÓIîo[Ư(è6ŸìÕ¦Ìà€TßFÞR}lnpf²23ï‰> ^]çAO‚”HwY©®¯£›ìÅ›æÒ½âmûsö±-‘Ë:TÒÎOLØ<íûðgµûï¥öòé1ŒfG¼ÅmÀÄ€øŸ~ެ1PŠÙÛklÊ]X^ñvó,õRQnÑ­¶ÙÏa˜§|ï«ÎÌ-/½òŒT?<ç‰>4^} h^Ô â·OÓo;p;%WßãðŠ·›OöÂ&)èÔ-ssQwá÷ÿÝ׸?ÉþÖ`ƒd ÝNÁxÆ×©0O~n08½Ý;ÉæoÃÍSЉ6d¢M'ÙYóßü¦7?¥µCÓ2ùèÕw{¢WϽ öB#> |,¿=ÙÓMoˆä·J·QÈÙ7£#q IV1àCÕ™¹ÙÅû˜êÌœ.½bùä'=ч–ð u)±LÖ\¿@I÷R°õ ’Ü+Þ†ì7¨ ÓKûò?þ–_È!ú…o™`òѹ5d;ŠèyèؼAÅ~K({{휼z$¿5{¼ ;6ÞƒN\M\^mwÀoT?2w¼vh:ª>6§·ÝvÛŽ®„®!þx­àŒû›]û ôZ—0æb˜A¸îÅ0ÃêÙ3¹lv&“Ë^ýbGE ôŸÌ9”½(Oô&Ó.„B€:çt×cOí¸¡Úy¡ûÅÒØH*Ì¿Œb™°"W»Æço£ä¦®OA§B—ÓXö]wî{ß‚bÄTÓ€`ÇÕÎ]ðk#e¬Öø†/ÕÏMœ×³Å=W¸ZYQÇbêÅ0£gÉ––«™.Ê®5={¸srÁ‘ÝT}tî[k‡¦ jžéY*}rGÙÁ$Gª‘ùM(*û{Í+èÞû$÷Š·Ñ ã¯ÕƒNp5Y¬¨¾@”tòCŸÇŽÛ;<;–èý«œm§ªü>ÊQIö¡\ÚpàÉ“ãc1^ñ6Ê}µt‚c‰ÏAø•ÊÌügk‡¦£Êcs®vè^výÚS;vXv¼9çj9 NîBôI÷ÕãÔûW‡ïjYJŸ+xO¾Càh¹šé¡L®ÎÏ]CN¸g¤j Üi;´Lˆ%ÝÎ1·¼G¬dJ¶ªË¤>…ðÙ×½ +Y' Vj©W¼í,\ª S„ÕšTP~¢üksuœí²ãI~K½ïÕ¥‚Õe~N&“§‡(šH-õŠ·™³¯VÐeÿÍj›¹ô™èj¯˜ª3s.(ÜÃqK]* K@vx¡«©¼…É$ÑNPKOÆâo;˜ì!RvBHMô$Ô3Òs ¶þŠT>4牾£f:œÔÑÊ獵ŠãÚöŠ·Nv )›Š—@~' Šÿ}ןλê£ó8ÜJæ‹`õÎɹ®Šökªäž]¶pyÖÒ'û® šö04}Î>‚áúBÐÃ]ᘪä^=¦DP‘°ùòçáÚ-OôõæYÈîøT¦:ît1Ê[ÉÌe%Œ÷º˜ìÜŠ»,§Çƒä ž|õ§‘ÔððûìIDATX{yD÷ õû§_693×KÅ…“]`é;3„ßy­¤Î€ì¿¨•ÔóPþáN­E§Ó?ÙÛz[I©£æ!•r¾8x Éû[hχ•k·’êŸb;#gQöŸ¢øE¶Û‚ Ð UøÈΓÅî<^= ÈàÝ~¸úlI³°}}  ª¦l•P8ðú¹!$y›†}Ö(é ¬ë{cí«e^`“ÎV?ü”C5œøÈK¯8à‰>Ôs_Ë/\#2©Öù7ÀKPž;16>Î×òTLÙ­Ýc¨HîNÍ÷ɯ+Š51a¡à{j‡¦ï®ÎÌ%µCÓÂÓw{¢ûÛäd·Z§ ¼˜À(ÔÍ’vMy#F%VžÝ‡ï7+Š7Õë#ù B&3ù÷>?·DE&ÿâ“;N1·cˆ>ðæf0í/þMõw'Æ.ÙT»²{ÝpàrÅÛFÿPb «æò•‹‡¦¿®òØ“néдTfæÑ—=ß}èPÜ•®Zç^àµIÅeD/Å7z‹¡TÒ”¦gÜM"yfúLb¥zƒ5¥08ДÏ5ð½úŠÝfrfN‡P‹ZžèCåͬ‹L/^$ˆzœÐV0Î&ÜÀ‰a2¨¤ Õl;ÖV¼mxÙ"·¡´ÁqíW×uò_$(z¢&É.H´ÎWoÍÃôô™Ò©È&TÍWöÙ+iד}=ùÕo'{4¸»-%ëÏð@í•ÓåÝ3O‘–Ú+§=ч›7²ÛYd t‰x#0XT„ÜÙ¸ƒ•Í4»LAWI{>Œß–pýjŠ·[¿PÔbNôè߉ã_T£ºCZM<Ñ×%goóõÀ÷] D–t)ÚƒJ°Éæ×÷ì‰øÝ¬à\âm£³(RÀ $Y?àAÿsõWL÷÷å©í€ üH}•Ô5Ð&p,ÿs”_¦‡ž-ZMLŠl:d7åÔŠßzÛ\’ç[hé3Æ®ÊÉeÓí?`\V®^6¹“øj§|7ÀÒ¡i©ÎŒþÖ‘Õzé ;WJh×ïÍïlÛ$ûw•%÷ùò8F£-} GÝ-¢‰”½‚nHÞÎöÉoh m}?¯ëê²L‡=«®Ó¶@ Ü0uXNa‚êÌè†ñ£ëÑû-œ…@ëì~>/¨VMâ’.EŽhËŸ' b&œJä=ûfÜmÉsŸ.¢|Îd•ó«€ù©êÌ\ aufŽÚ˞뉾­öÐÈ{À¤Lx˜¸è}Ðó‘ÑfnË[*hÅLXõaü†ËW¼]?BB ó»ÚVþ$ÀáÚ¡é/C„Ú¡B{¢o+\~:­LOë|Ù¾¹¼O??¿Pp´»Îƒ,›U@ª˜²u²ì™{Iäf(Þ6ò£ íûªe€÷U}2Uý"=ð2rDׯà©ûÒ‡òpÝ\d6††Ö¢€ÔŒÝ„Q­šJšú­·ë ùæ)Þ6’.X‰Ô]BôþÁäQ;4ýTgžìÕMéˆl)¢çWм=T€¯Z3\ B­EÁ¶yóKÍG¼‚nÝØ\ÅÛFš1B ±ÆïP Ìh–ZG†èz!oÕÀH…T—©¯Šk½•6Þ6Âä&Ý+èÖ;J[£x»n¯.!BHp…eæyµC~dò±'SÕ,’¬šöDߌåšvÍŸÙñSÀó®`@=£vP½‰oètë ×·Bñ¶‘ð=Ä’^áEZzÅô®êÌ|R;4m*3sè«_艾é!{ „¹7¯ó"²ÜŠ:’èR¡;7¤zÝZ¤ÚjÅÛÆ˜P‘Aé]á÷Šò“ù+€Zýœ'úåçýRȃÀ°ÆÁÓ,lÜ…b8$·¤zÝj’oâmcÏ©%XÓ«÷gì»ë‡¦¿vrf.­:`&{šÚˆ4“z¢kmpüÔä„)pÿŸ_Hµ4u9¢·“üi«¦loMQÍôxÛ®<=‚5ótÉßàNÍû¨ÓÚ+îfTÚ‹ =Ñ¥: »Ó:û€Ã™É`¯÷9=W4bƾ­·¢‚îf(Þ6‚ h¯i[+xEíÐô·O~ø3Цúص(ÌDè>Xûá%Àÿ–OÄÚ§Ñzz¦Ø!tÃÙžùVTÐÝÅÛFf&¤€ k]r»+?P;4]­Î̹Ú!ºoJØ®¹0QÜüÇ«†{§ «K…½y!nxMêVQÐÝDÅÛÆòtzÙ=»WZ²pÀwßÒ½Q8ìb†ýédhåÕd¸ôŠÏmQ=[ìbPÑý­ »™Š·<­‚tb—uühíÐô핺ß8V _ ü8ÙAƒ+7òJwº¨„#£SÜÙ º›­xÛ˜O/r¹âžº!; ýÏ€³Ê£_xÙ´'úuv}°Æ­ïºæó hjzî\qâ’+‘‡Ýçí<]¦xë‹a†g m½^=»Zùj܈r7ôÎÚ¡é;–Pò}ý$onB5RÁÿø6²ÎÁUÖbÕ … ¢Rb´nIÛY º,\_N†H s=]A ôòèñjoi}ÀëD‰ß˜ZiìÐM€.åtV¢üùžnËCv¹ZЕÎî>¯§ã=tD<ú¥a£ ,¹zjÊÄH½A¾…F‡FúLà°TGŒä+T=/ç4aÏ5ž¿KvÖâ^…§DÑTÐ=CXœ*®5̤B¼ xnþœW%9HKOÇá…íW ãGNAw±âmtI¾2 PT»ŽO÷ëEOÎÌ9„pÏÌ‹‡îñýªöÒR Åqø²³æ×ìઠçÒ?Ý¿—‚UœŒ~×¶QéA·"†©Û†¡ßB[ode9çÎËÞu|>Ésöo®ÎÌ}¢v耩ÎÌ]5xh<ºÖ³Þì@$(YG×Ò5Ižß¦fŸ-u èéÌ8 ºU$w;ƒääé„ìÁpzuÌx¯®dILô…C»†î’Æ¡!z^€ ¥BWë¼øæõ›«ÏŽUòýÏÁôQPЭ(ÞÐAòÕT‰µ°ŽÈ·ÿw_Q;4}¸2ódw?»¢Êµˆ&.¬ìœ¿…µJ¬EQ´œ¢gʰÃ¥+ :•€á"{¦xkŒ„âmƒc/ÅjQ×1ojº+¶¶~è€x¢_a¨¤‚ÓeöÕë Ýñ±R~AÃÎì¨n¨˜jš]Ù<,$ﱜUׇ^ñ¶Ñ7„w¢ÔYÿ­}ã ÅÛwÏ|Á)Æ}C¼>ߥ’??ÛAµtgBªA5M1C°Ïžu†IWU×wæ˜+iåo¨ëúž¡õúš®/l9©Ípß¿eEAWM“›FöÅÛ(Ša6†¢šë¤¯x¢ovþ€;^* ânãž—’}{ÛR¶âmÃGŠŒ¡t‘Ñ~×&z~%ò©’Ý1•öë#»Ý–ÝJ·Fz<°·Œ'_aÈ®#|÷Dßäœ,t)Ú{ }5Ù«¦’ºÁÖ›lÉwŠâíF\JQÃQ͈ÒEO¬¸[ðöÒ‹{Ð…ZÇm2ýV+Þ†±ÇÛ¶æé„(n”Ã÷%º@îD\ •[û’ );dßd’ï ÅÛ†U ¨b8?Êáû(½:ž×Z!F%¸¥‰ÞWЕ-›¦ ËÂõúŽS¼m<~ÒUÕw%Ó¶eç¡¢g íâï'¾¨Ýè´#MûL x’ÆDй0Ö{ôm4ëô|¡MϤÞ/šÍê )èòo6»\¡ìÇv0.„Œç`4¥Yf4‡ew¾X%•Ø[áeñÎÆtY·Kð¡ÒÅ“‘"ÅQ ßGè°XZaÀ™PЭÜjšànÉ-´õ0Åi{TÃ÷Ñ¢J_ ·XPmêóóu‘ýê º•[M=ɯ>ª1*@Ë{ôíyâ®.BzAÉ›ãºÈ¾¶‚®OçìVSëI¾ŽA58B:£ŒÚÓ6¥«õ(;Ðâ±²_® »\ñVñ$_W4)iaÃ÷Ñ"z®…Z ‚»ÏG…ì+ º@kX!NÛÔì i~W­'ùzØR ¢tGm¼F‡èYå3¡%Ú Ç|!n£ÖÿŸ¡b&­HISmˆµÏB*åüž1ÅWÙ×åj$¤p…;Ô‡áH-I±z¡ˆx›»*¹W<º UÕIê–L€ã1בH¿S±(3¸—¤ß[Þ‡ñWr6!=B²K™Ä}K‚PmV— ]7áýÏšä$'­¬žwçƒÔž JÚ’yB~4z~ú'ö¯ ÑW»ß”Ðþ'íÈó\]Ú”"ŽÝÈà_¹xÁðè3¦$!V»è(r%ît9W‹ªRt>мt”ŒÜÚ”Sn1ÝÙ íº<h©ò£ÅùÂ/Õ{ÎM¼ý)Ðû½»ÿXšÉÁt1zM0®ïbíq\2æ&¥Çm>=Z 9¯Ùê>Gßl¤$z¡°œµ›ð4xqKÏ-šÓɓљî_/ôþ¶p{z<Øã:Ü |P½½rtþýÝ=WúŠtp¾Í.ˆK—"W:¼ðˆKÜ~„J‘;Í^ÝNÛÛÂ/±ç‚ÛÜi3ƄުàÕ‡ï‘ ‰Fi4FƒèÚ =ójû­JæžÁâ°š’jÛ´ÒgƒS½ŒÎw>7“ÏF·¹³f?°›€.ÂCäËÊÍ¿F­tëG˜ÊÑy—:h™¦sô¹h¨”XpícSÆ‚néðÂkP¾å8º{¥¢·™»ìþðKm=xŽ»Lê³Dô0¤ÅÝrÔW Š­‚\82ÆÞ5=½P(ìð°]Výrô4H ´i]MB{>hiWöK wä…¶“Fù4"o/?4÷û#"©hãÁ”^|©@ë‘»0Æ8k­k›ŠJ‡> |KûØÔw?¼Kì•q… Ý:Ú‘óº,cÚBéQV+)ƒ ž}'S]¨±HˆìÊ0OôMÚT—¢e”ýˆ**;å6Í _`@DÑD–µ+íHÏ5ÕšXW3¢VöH ‚aRŠ ŠE òEïï€_/OFð{ `Òòѹ¤qdšò{Ö¾ÝsìuÇh›¢tx!i›2@X:¼ðÛgÞqçï”Ëá ¼ x> 8R,±„z‡ìVØKJB]Ûâ\S"ºôH$Ò”Ëø5®ÆÝ¥8 ßÁÈÈ8Ñ z*Æ,Bå»ÕV®rîÛ¨(ÒÕ©6Mª)¸†éhSp IEd£€d)‹¢¹ä%;Þóð!àÊGçO4^ww@`Ä™¸W}÷?Ñxý4凮}…oéðBŸì®ùð]½ö±©P?°ðŸÛǦ>¼x%ÂsK€%DØ%ãJPVP½ mƒv¤G´ Ú§)ã"˜AÂH^k}Qø.PƒŽÆb6üDÀJWÏÄ…¼ye‹J>aÕÒÔeÓ³ËA¨Ë‚¶%pMƒö$£{1™!f„Èþ X²›;»À/*ÿô L7’–ß3§­7ÜÅ™×>ŸòCŸY÷ƒ–/P{÷s)Â|*m=2%y8ÿ4ðæö±©ß^¼ó]ùmô)‚Èn‰)é8B“.hOЮ4é`]G”.ã@a°¸BúÑÙ»Ïä°»8OÊ$ ¿®#ªèRa™Dö»áÛ/¦¶æävIb­™Ž¶¤¬])jGD­ŨA@ º ®œ{V2yF1§Æ ðþòÑù?¨9à&ŽÎ'KGî¡ydš±wÏmèÑ«oxfÊZ:¼´™ EJ¯yúñö¯O=AßF8 ¼4ÿ¶.PPtEc7N”½“”5!%‘C"mK˵q4¥ƒ_.éá2¼óœi D *Ú#”#Atw²ä†8l¿T‰–©Ñ„D—eÑ.ã–L ]©hŠ!‘J±Ÿ¿®*¦­•ï%9¹‹À,ðV”?/?<ßʽ¸”ÎÛÓGÐ:¯#—WÓ7 ñƒÇáÁã´ß;Eém¿w XJ?´Ð>Þ~ï]†ÊËw‘‰G’ܦäÊó‰ „ù"³/˜PƒRÔDλeI´!!]v!—~Xæ?/ȱC Ëä°§ÃMtmÏÐ3wQª°]úRQíqÁ¬;oR×4“Àmù1’äõ©ܪïøyï?:_ëÿeýõ÷P6=£oyÛÖßÃ]z`}ÛóiKB3¦uì.ƧôÀñðÁö±çþ˜Ÿ^»ŠÒrÍE¼oƒÙX¤¨»ƒ¢*»1ê8«M ´!MmÉ탭»á ß°ÚöýƼ¹=^*c2Ï>$!ºº†9å.˜’;´5åÎ5 ðFTÐø/à,}z®qäž0Ñó VˆßóìöÛõÛV {í÷Þµòõ±)j¥Ã ´M½x?ðÏ7h[}¥=°O* Ý ´´#g´!±.‹QË.tpe…ÜL•"É(}¸•q‚º“¥v¶ë6ýÌþ¯¬–lQíHËžÎ%ŸÎtÿªØHþ!ºÓž v©ãÎU{źÁå¬ð· /.ÿ·*ÁBãÈ`‚Ϧå£óº|ä•÷Ìßôi)=Ðß¿‹Òá…VÚ>6ŠÊçK‡¾ xðÙ¼ˆxå Äz—WeLb}ŽÙïö÷ÚrxÀž ö¹sRÒE,™îÜnóaÛüu\%ö}CèšsºÝA¸Åa{×Ñ#E4«]±vÑ,kÍ\Äbtf0bkU‡eïÏç€GÊGçß›…ç ÆÙdâá§µqä˘8:?tÓS:|<ÿjŒÒá…´}lJ:Lâà ¿ü^û‘©7#¼8ÀÅm’å:æf¥žïr› ¸]v)Á§guÙ„Ú«ÊX1šâpß»u–£%"ž¥ÇsbùÌð]óUÜ€ž(9Œn^Ø®«â˜¾'NikGT»격kCŠvÑ´4‘}ê8r%š¦v㦣yÞßw}xÌ8ó3ã<Ù¬™ŽçÊÍ÷j¯?€¾úNäèSC–/PÿÀHO4~ÝÓ½ö±©@ RzíÂ;ÛLý2Â[s/Ǫô$¸îåXV£²O&©(‹Ú¸Žtµ%$ ‰)ѪZÀæ‡ï±ÆÚî]ßá#ºäùx ØgK悾ՙuV@Œ:íHݵMQ›ÒÓ¦1nYœk˜e¯ e)”h’{’I›//Ð~“LÑö€Æ‘¡—Xgh¾þnÆšg”PùÁYþñð¬I‘ö#SQéu g#ícwýÈÀ!2}¸»ôñbÒ+BŠ*ì"SRØ£z´´-‘v¤§] t%Ñ”xÕ6Þ Wó¥(¢¹dhX½úðÝåº#KC—¢Ý×9tËU H ¢NšÚ§u“¸–ÄÚqmQmK(’ 6$ÒˇÍYÿ•lŸ9Êÿü[À¯”΢OpÀ–Î\{¢µ?¸°ú½sý¼˜Òá§gïk›úmàßß‘îê[rëÍ•eU¥Ä¡Xb ±”©jJJ—®àº(]9§m)i— ».Šð®oï>³N£» å<6—ùz¢¯ƒ­OUOÆŠJpM’¯©M®D3Š&²ä–Œs5#Ú”B~PÄh*1:–)ÑVy]Ãxn½Ü{EÀ'€wŸ(o.>x„"Ò'øVî‡ß,äÅ:§¿¹Ö±)”Äàé·Mýð­d'ä¾6vܪÅðF£BYå8ÈτĊT-=‰4EéRw-I´-†.“ƒ¶Z×CzŠji‰'úºÑ ¡’†îDI¯Ø»lµßî+ÑŒ¢-9åΘ’] ºÚ‘IMDÈ 3`(®¡DÛŠ©±¹/fy¸¼ô¿—ΟÉH})‘+¾û º|äGçwÉûÅ:ýÀ´Úã¯{Úµ™¢óÞ)?°°|¤}lêÏsÏþN B&§ØªÝ Íg&ˆ)P`Œ$(k¬CÊ¢6ÑmmÉ>$ÏëÍ%Vw±Í€‰‰\sÐ{Ïýšs!Šá¤.æ+uîŒÜW3‹vÑDî‚1Xö©pŒ£«Š/ÛwäàÒ0ý-À/•Ψ¾‡ 4L<4çÞMý_ÊÄ»>ÏN†ä¹{óá» GñµÇ]çØÝ$ô(^8¼¯ýÈ]CäõÀ7)œ_ßLõå¹$ T¥äÀQÆÑr-YfYB×”Žê%[¯“>`ø h艾˜{ºªsÅP¹<2 5{.HÜy“¸†©¢Ü>˜´ÕÛ)ÛBõmðaAdâèSÏôÿ²qdšòÑ9꯻‡åžfâ=sÜJðé¬XwìnRRʇOÒ96E|xÒëŽ?üHûØÔ/ÿjU±n{fRsºö˃†²©èÅ(©ö8éêRÐe£$ì½ì©‘cºì‹qëæº;Qjce@בEw.pڑݘ5žûæçFøÀkÊGç?ÕøáiÓxð€˜Èèø»ž¤|4#vå‘§¸•~zðuñ\~xæè~4ˆEŸ{pá[ÛǦ^ < Ü{³’üÿ#)rG°Oa¿…”s®aÐeA»ìé×x¤¨M·h†2xšÒ[ˆÄL%ªJ5ùÈwç‚=ìÙ°ÓçbpyMÓ1\§š„l»ìmå£ó¿~á _.‘톢.™xøi.¼ú9ìºsò" ©Ç Zï{.ñé*æmŸ¡ýÞ)A K‡’¬˜7õ£À ææo[­ÖQ Š¢œÐ†\CZÚcŸäÛ&?6ÿlí{˜êoÎ;OôKÐ>ö”ÿúù¯ –ÞÒÝ¥âÆMÙ9³?5bH54+¬ ’NrzïN¤õ#ŠIùè¼[~ã4®ë¨{ʳyè¼wŠfö¼iö±©!,=°Ðm›w09\…¤¬¨§©(B(eU3®Æi›_/_ˆ>öiï _BáÝ_ð»æø½í‹#ùÜ;7È÷ÃY<ò%,¹ÇOæFüG¦²ßß=EûØT”÷±-;æe>t¿zÿõv ß~ Õ2­·í[™n¯ŠV~JëÞCåaïÁ7'›ê÷²•S]Q>YÔ±}žÖÝËØûŸôéáááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá±øÿ=“Gû^”ªIEND®B`‚haxe_4.2.4.orig/extra/mac-installer/scripts/haxe-postinstall.sh0000644000175000017500000000056314146064214024605 0ustar andyandy00000000000000#!/bin/sh rm -f /usr/bin/haxe rm -f /usr/local/bin/haxe rm -f /usr/bin/haxedoc rm -f /usr/local/bin/haxedoc rm -f /usr/bin/haxelib rm -f /usr/local/bin/haxelib rm -f ~/.haxelib rm -f $HOME/.haxelib ln -s /usr/local/lib/haxe/haxe /usr/local/bin/haxe cp /usr/local/lib/haxe/haxelib /usr/local/bin/haxelib mkdir -p /usr/local/lib/haxe/lib chmod 777 /usr/local/lib/haxe/lib haxe_4.2.4.orig/extra/mac-installer/scripts/haxe-preinstall.sh0000644000175000017500000000030114146064214024374 0ustar andyandy00000000000000#!/bin/sh #ensure no conflicting version is left there rm -rf /usr/lib/haxe/std rm -rf /usr/lib/haxe/doc rm -f /usr/lib/haxe/haxe rm -rf /usr/local/lib/haxe/std rm -rf /usr/local/lib/haxe/doc haxe_4.2.4.orig/extra/mac-installer/scripts/install.sh0000644000175000017500000000057714146064214022761 0ustar andyandy00000000000000#!/bin/sh cd $(dirname $0) # haxe chmod +x * ./haxe-preinstall.sh rm -f /usr/lib/haxe rm -f /usr/local/lib/haxe mkdir -p /usr/local/lib/haxe mkdir -p /usr/local/bin cp -Rf ../haxe/* /usr/local/lib/haxe ./haxe-postinstall.sh ./neko-preinstall.sh rm -f /usr/local/lib/neko mkdir -p /usr/local/lib/neko cp -Rf ../neko/* /usr/local/lib/neko ./neko-postinstall.sh cd ../ rm -Rf /tmp/haxe haxe_4.2.4.orig/extra/mac-installer/scripts/neko-postinstall.sh0000644000175000017500000000131714146064214024612 0ustar andyandy00000000000000#!/bin/sh rm -f /usr/bin/neko rm -f /usr/bin/nekoc rm -f /usr/bin/nekoml rm -f /usr/bin/nekotools rm -f /usr/lib/libneko.dylib rm -f /usr/local/bin/neko rm -f /usr/local/bin/nekoc rm -f /usr/local/bin/nekoml rm -f /usr/local/bin/nekotools rm -f /usr/local/lib/libneko*.dylib ln -s /usr/local/lib/neko/neko /usr/local/bin/neko ln -s /usr/local/lib/neko/nekoc /usr/local/bin/nekoc ln -s /usr/local/lib/neko/nekoml /usr/local/bin/nekoml ln -s /usr/local/lib/neko/nekotools /usr/local/bin/nekotools ln -s /usr/local/lib/neko/libneko.dylib /usr/local/lib/libneko.dylib ln -s /usr/local/lib/neko/libneko.2.dylib /usr/local/lib/libneko.2.dylib ln -s /usr/local/lib/neko/libneko.2.1.0.dylib /usr/local/lib/libneko.2.1.0.dylib haxe_4.2.4.orig/extra/mac-installer/scripts/neko-preinstall.sh0000644000175000017500000000007214146064214024410 0ustar andyandy00000000000000#!/bin/sh rm -rf /usr/lib/neko rm -rf /usr/local/lib/neko haxe_4.2.4.orig/extra/osx_installer_template.zip0000644000175000017500000025776514146064214022057 0ustar andyandy00000000000000PK >C Haxe Toolkit Installer Template/UX ‚IRaIRõPK>C)Haxe Toolkit Installer Template/.DS_StoreUX ‚IRaIRõí™ÏjÛ@Æge·‘û'èêCKÏNdCRèÁ’[A†šÒJ–‰De­°¤:EuëJÞ¦}…>A¾MWÒ¤uÇ!¤$ÌϬ¿µv4æ™]­ ¬“º@T(U{ Q±AA} “çpè¯Þ-ÎEAÄ ÃJQÏY÷ ‚¸ÃäóGm£NKe8® VgÎÑP9juZ*Ã8µŠª¢j¨µ:-'-†›†ßÌp‡Â4TŽÚ¾”e‚¸Sä{÷§°6ÂàŸý»‰ü¼ !IJgËcŒÁD0WFõƒÃê‹aTdRNޝ’k(º]7Mú?ý¿ŠŒWÈåþ·\‘7ã±R¼¯‚‡¹Ö¡)cõ¢­Ëèq9pdÜ7' ü8Ñõ¦Tª÷µšúhÏ]1îˆ4tãW–'Æ–ï{ôºè'v’Æ{TŒ¼´ÏÁ~Oˆ@ö÷1zÏwïö$Ëž n4[“Ï67õo5·&“šªÖ´êÚ³;=;û8ùô¹¼à§(<žû%]äì½5 @9ý¯Êª d …7o¾ ¦tÞ4õUøzù*,q6W…Š<šB2ã÷û5ø­g™¡› n¶Ìe—=÷;½Àð—¿&æ¬ÑúO·˜r5ƒz¾ÿß>ÿù?A·VíZÝüy x†|­å²½==–ß°™? éF€ ‚ ‚ ‚ ‚ ®ŸßPKdè 0PK >C __MACOSX/UX ™IR™IRõPK >C)__MACOSX/Haxe Toolkit Installer Template/UX ™IR™IRõPK>C4__MACOSX/Haxe Toolkit Installer Template/._.DS_StoreUX ‚IRaIRõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPK Y:C=Haxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/UX ™IRYÉCRõPKY:CPHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/01haxe-contents.xmlUX ‚IRYÉCRõí]sã6¶®ÿJ*÷“LÒ39ÙU{v•¬¶:–­ˆ²»kßtÁ$$!¦$ÝV~ýÁHJêÎÎáû*ÉÉìäÂU¾Ð€ø\XXÿY>mÿ–Ú¢ÖE]}V•:ý×ç_}ñÕןÿ×n>+þõùN½è¿½úâï_üýo¶zùü3û¯Ï?¨B§OŸ¶ý×çU­6›Ï?+=óÍ·ÿçÿøÿê}þå}¥]õeüÙ—KgÐi]}yíKúlmmþdêÏæ…Gó\»/?®`ÿ¯Ïk×èÏ?ó%mL®»†Œ¯G·¯§ÉõKý?·âÕ«¯¾ýöó/[$³éÿ«Áí/Ûøë÷ Uü鵪vê1×_ìê}>´Ý¾ø÷ó}™¿J}¹iÉ‘sêÕˆQšêª‚¸+?0ÎXEZí噪êy­ª­ƒª¸1Ðï =tŽ,m>¸úá[©"³{¨E®®ÍÐ^2:Ïæ~¢oµ»±ö©)¡š~Ûìµ3)UJÿ™Ïû-žèÇfëëÚ9Ñ?6Øz{b“ƦOØznjý~Ó”½ûðõÎi•ȵŸvàµÎ±µüV«§•ÞÀSå'3tÛ}éÐ]l–7Õ"H¾¥ÿž‰ª±Ž@Mì»&‡Bí 6­§Eƒm=<¨\lÓ•ÞBÀÆ»¡'³?–†îÐ+­rù9<'U8-Í£ÉM}XÙè”ÁèSR¤½÷’Šª-ørüþRjWM«y¢•Kƒ@³Ö/ƒ{®e4^¸Dç^">àØõMm÷áÛ÷»üøµ.á`ÔW6‚ZÛnGÅÆl‡Ôwúðh•Ë.ª~a›J_TBR«­«²n¶ÀOÁ鳟«ð(#«²ßÓÆ¹á¼ÌàŠœãý×dºzªíàc,7e~P¸n©™u~ıUÝÃk§Šj£ÝÂfƒ‡üø™¦*s5|?”ÞORgÊúÁßáÝìañÕÂ>lj^™z¯0©7"p1¶¹uI©R¦^”+ïTQhìÂé©—W2SlÙ–çºÈùg”*«¤>€2ehâØúuÌl·glÒ”¥uØ&2‰øîQÔ<é·–Z™”Ýg6mª‰a>}æÔ^ߨGpz¼v*3~Ç\Jð¶äT¹3)¶ÇtPœ”33ür|†O‹Œf»¦ Xª»+œ‚~ÙûkÍ¿5…,cŠOv*ÓŽþîÄæ†ïö¤vö‰›akgT±Í5Üñóó]û®”EŠºíæëÔX7Šðy÷åðQÑ“ð8Íéé=¿`ˆEä”ßìž5±áº´ymºÞY¬ŸßXSÔøõf9}}Éœ>œÇÚ±ø»Õ¥ x·º  7þ`KR•kX$¸±²ȼØXðêãÊßòÀc-H“" CÔ­’)¼ÐECbóZcZ—¥yÑyR¨²DƒåíE³×ãÌœ$õwpŒØÁ3&"ðæ±yQ6Ø6¹7{CˆÔR‰ØVSس°ìÖò^Ì4ð• _RQãsÕÔ5ZU)jibc÷ ¬A]¯&83ÊÍ–PÂ´× ÿ?óiß7 Ö9ÛçúÖº'tf¿1z€ND7yŽî‡X+?Vt¼š ×5Õú¥'LO…øÌ‹J ö²/`œkåªÂÞ¬Ž¸?2”Ã'B_ÀÂÈ}Ýéz¼} £á­ß+á}²/`å;SˆóI­‹Ôäœ9!óÆéKú°+"(É"Ú…6C5H} ~yû®šÍÆßE/hÉ[ë€d­\ˆí©:öx5thu;HP5+s ÃÂÀ0WªÂ5ħ`xwö¸vκ¡:rÛFÞɦaÊ<½1Ex ØÕb¡ :œÞÍ'žUŽSó<×[•ß•:>h%¾b“ùcž`ïpf¡÷Öpnå—“&0í'µßê 4>‚¬Í^Û†˜¯‰N/ôŸêEµôéîY»Mn?ø¡¨Õ ÎÉaŒS÷EX•~ý¤3_ÍqÈoXfƒuìq·’—ÏÁ»Ušê\;.uЛiÿ˜ö,S'«C‘†$ØQЈz†aý>i6ºª¥ †_v7"°©8ÒßL÷ÉS§;œoeÑûà°¨5jµ5õÎc&¥z뼿÷Ë… ׿JQäÌó匛ª¶{ÒŒÅóýlRýÚÙ¦äqZÃó5/t­2v>°³Ÿl.IˆÖCùUÞy»Üòéñýoé¬És~k]àìkµ×AçH Úæ¶]B\Á¦9§ Þ¹×ëõ’tóK&Ã|1%j¼#'zg¸…“ÁZ ÇnuÍ Œê ]X/‰1äYvÜ5µ_)á.®+‚_ 6*²µ*éùÏמ(92¹±:“ï ^4™±,AmúèjÕÛ²aCÙh[ˆŽÄ=-Ì9tÊz´ÑøÆ>z˜•hªmAŒüèÁFÆfć.)ñÑÕÊDoEVÓYbš‰xš‚Â{ Én•ÐÕcN¥OðŒýôv˜=êõ×ßüãFDG˜bŒ¥„ ·ÔömK×µßg@o‰É+ÜNÛ¤^4ßYpŽØ´Ø©"Õ¸{Ú§EPͶÝ;Á¸òEÐ&æÑ°hEψ_˜ôö!'“Õu¿‚¶WÓà>&íJƒe Vh/D›¨Úáo27ôÚ8ʲµ=y;m¿ÛÏÞ‘ KñŸyÖ&çÕb#GÁ>çÏÇðûo´2#±DA€—Y¡mÖäz|Hs¹?TÞóEˆ8òèOQ9Å£Ñ~@K¸_ÝLì‡"÷»9b¢‰Æ›Þb¿N剿¢RW5ÙÍ»2ˆeÓ¢1rbØÄÈ2­åÅ!¾ËAm˜y…Pj Ö[Ùñä©ÀWï°E•:5ƒ>?_ÞYñVü[P7:Kös­ TX·ºæI|gë X–ìÀ•Nµ8Ö¡á‘/óö<ðg­¿6m±ã²+'a¢&œÂÄýëø2bÄ%ª§Feé›{u¨uE89ôÅ0#É…ï'?dUÍ!§s8+ H¼/$º?wa:@uqUÚv’ƒØôIæÎ_•pwíS0D\#ä_¢½^T ¼Ž{JD:ÂOÅó+‰@3GìZ3mnaBö0±xêA9#±°|·¸ÁƲ=Jg ‘x^3–òsÔ9·ƒ(éŽ=¾9ÁßXK!7ô&UL%1X£/!v®M´XüÆ™ÀòÍ2ˆ86„°8xÿ·ÖVCߨD§» –ÕÄžöîŸÿûÄË£~N7¦ÚéìhrWœ´øÜ¢œªNÝ0!úh°Š·ñPÕz°n¡ì¸‰Ý+F;Ò}€ê‹ €å@ÑKX'~.3­‚á…8q ŽUÕh°m}èõ¨izkê]B8ËÏ*xÎ^|åu”£–Ö¶ÇÍSô÷b!ÖáA–P,¼j–'þâ/ñ -ô9Š¿*u–¬D¬æ]*Xß¶¹/3[뜒¸9¦htªà‚³D˜†ˆƒAhÒô'€Lò¡û¿—G¹QøÃþ8YPO_ºØšBlÞ•—³ŸîBl¦@—Âx6»Ž0†E õ4Æ6s±‘£îzk20œØÔßáG•QÅ›¦ªqe[û}Ämæ;h¢«à† _ô,KßcþªæÐ0ŠÂ-m»í ÷V›íÕ}†oÌÔ‰^qØŽ~§„C 4¾Ó®@WÈÙA s—xhg õ7¢¼ñ­Å£ìH Wn¬ÕcˆCŒ“Úbó\¼$VlmÀM´œ(ˆ9'Ù›ž¼a>N ±? H“ ®ˆ…¿„•Þ“Ú$*z ¼²Dz*K4ÙTc¥—dƒ7>|Šˆ‹+QRqÎì‡Jâym£ŽyTûÃ㱩uˆWÝ[äâ’&0»ˆo&…Cÿ‡HvÔßJ=ÑÄŠ=ÙFMƒ·Ö°‡¼ÔÌ2äp”„êOü£©"$¥#†‡²;²íÈÀt3–¸n÷û%!t…Ý.ÕÄá°jðn’èžÕŽÈLRûˆ5#¾7C“M„ºÀo+‘»jLî]"¤‚ Žeô¹ .*ÒÚûös”TíÀüjÃøùÕí’8væ¥YT7ܱרƯó0¦ ¸§¤c4šË‘·“Ç=Šáä55%mˆÚÒ¡¦aÇ)ÜR °&ºàá }0è¿è‚‡$îA}mˆWaØ_ÚßпÞ]`–[°7vêeèëÉûiÑìg¹Ú•‹ûß¿—îïá¯y]×CÇJ^‚j²ãÞ¯µo¢ª‡öÅô¥tkû¤Ñ‡®X‰ÐˆTÕÔXåb² ”¤îPÖvh·g¹v¯0ͦÇŒáXU.«YdÿD°¯à.Ά®…÷¯åL5iÌ)2—w`@w²ˆTµó7®u¶¿fWl”†W“Bvž¾èGžñ òFóÕœŒuÑ H©NÞ‡è¦ÿnýž­4+ù•ÊC„šµÓØ&!NhðÌxß®´±F>Ÿ¬Pl—&`Í ñlS¸Mp Ô†V$ +Ù‰‰víàúÊN€g!²î|î⨈IèLSO|óˆ0CEˆ˜  þ÷8«Ã9غ PägS»Á~O¤3ƒ_m‰÷Z4#{Üy ¶õëûMns7³²ß«Ô ¥Û üz_Í0¤°¸ë”Èí8d Ð~ö½K–Œ>á°Â!`ßP_("ë¾4¨+nLSõBUÖrøé3¶âõËeÀôþ²p‚ÃNp¸*2ä¦ezâȉãÀ#jÒzÂÇ´¦\Ë}›ŽW² „ùÊÕü/å.H®•øbÄœ ±Š-±Hä˜^™•Ea†Û°ë í¶<”¹©©ÚƒÃû3A†‡$œŠiϪ.r“Å+–) C I|Ýî¹— u(§ÍuA1w›„Îm7±\àN¯»*5y.bÜ„¥LKB8ív¥Õ¾UÏ:Ù©’¨ZÐ5"WEég|;`Îè+åà„ebtÊÕUi i˱²_˜„£Wzcÿw|Â^å £÷•ÍÔ÷­(*DÌaÈ3ᜠ»(º C‰Æù²TN ül_c)aÆ“Ñz”0&;%—GDŒ1’W¨ÿƒo }°R²~[€W˜¤Ø!˜.5SaQYð²Aî Év™ÈÀ cÌØ6°â8¸ cH’ÈÔ¬t ¿x4ÊÁE F}—ÎTª™jç{É\ÂßéÃF²]ÂV LóJÄ7¦º¥?%)Ι½é}LQš©Q|‡J’C,0ý¾ŠïÆ-Ï4˜ ÆáÉ>jÕ¹÷ÅSa?L“©ú„LSÕvïÊr,JeTz ÏÆ¾Õ¶jø†¿X €ÕT¿°%Sbµ•œëM­LN‰p1²v›F_=_XîüôIrR¶ˆ.óÇ }jšËë(A}bž)ŒžÜLpÕš9µ¥aØNor·8I<9VéæÇþ¦6}I5îíîaÂãn!®@°Lî9yž £I¬Ÿ»ÅÂìq¿Í=îaâ-Z¨¼Ù‚JØž¢šÉÅJ `]‹¾%DæÁ÷q_@ð[æIôÓƒt[ïWXœf`Oìbv¬–Ë?&Ätÿ¨3ªÞ¢FCG„‹\vüì" nS (õÈ7VÜZ¹-(ƒŒ„{Ÿ”’0¯¹©6±8bâA€¡9îÕ×ø&ÀoþA€¤vVQŠ“û4 ’Óe3Ôã('ÂFFç(<ò=NL¸X¸ni±ÑõÞLXc OÔ#F}ßÿ:¼>9'¨údë A|(z ߨ„„…ï@QÇšDÄÕ#F÷jÄ©Â,ç>ÂèGnðEîýhcûwOIÁU*ìÙ¡eàãüµ¶9“FËs%U@¢Ë‰õÖx#¹ö;9sÒ 'Ö% êûÓ‚È5õ†y½^ÜŒò|lsæÚ'4‹úß² Žáø*²f“ u› C7ž­-"oM½ÃÕÄ¢8y„ó²·¹÷«ž˜ó"ÓØÛ š¦ÀÿÏ€#A&þs@®ÔÅ䊉bÍ0A9®ðI~_n@oµÎ4ayñ äÉc·Ì3œõdšÓ÷“ù ˆX(ªœ믾Áöޒ¾ũ7êYEÃ/E ¢«9Ø?àÓΓ[MäܨGMG7Ú×H‰7sŠ2ÅÅQIKUÉÔµPίxja„'÷Vo‰Æú;µÚ$@ø0?å. áHXÚÔ÷v‡ QJ™­`qeæBィÛGJÂ7nT•ßÎ[ie†3€K4¸Üõ¸oô×Q ´Ôò,ÝÒÔí#&qïî`¾Ú»ÇJ;4þA¯tjAÛ=I¯šÍrðq(Pb¾{ݪg³Åƒß£Ø.»‚qÑù[Ÿj"^=d6†8OOÁ±† Oñ¥v{rYS‹$^~˜%}ÇšRøKûkgJ¢ˆ~Š ·)Òï¿(ñ}d¶ô²)IAFøpï#mlÅ!ÊßþÊóÙÁ›Š}wI`Wô%÷„kw&8fÚ±„µÙ› !‚gmôc›ˆ‡=12­î’Z³ŒË›g$W·£Äù£Ý¼¨j×Pñð¶âúEÖYxœ¾olM}ðJµnŒðI„+°Á©ñ`†V‡Óû?‡[=5“V¯¯ðЮNªlE‡Ãˆð'a#B¯«yê{±ÈL†ZQž‚xƒC„ÊïDâ>wG^|#ÌÝa#ëUô:ñ|QÓC ¸Ú ì÷þ^B*+þ‡2¨IûiYIqG‹Ø•¡5HÀ]uãå8õ" pŸHæ˜ àJ—¨Þ åªÒߎñS§ÁüŽQL}bç:¼AíËÎHÜe9Ø¿R-©ØywS WNAÆù!*󈈧 ¼ F˜êßRQ—ǤÔ:ݽö²ÎŒÏ~Fâ_èøH7'0/óšl¼¨Á¶D ‚OèQ‚ˆ‹WÜeágæ§EƒqR=$Ÿ”Lõã/üô!š6, NÂæìû0‚¼1IŸ' ]uO­ì|!‰ŽAö,Z¶4/ç±¶'Ü¥õþ*‡'ÕG,mQ'Æ%¨%BË[Má÷²Žïí“BDw!~\È}xŠã ñ%8ôsò…€á"„c¸/óÀçÁ)\¨syý:?”»‰Þ\‚_Š1Jp ^3¢.Le¼PgtÍÙ•µ¹ƒ¢v¬dh`¼;~îo h( Ž½ÑÅÌÁpŽâÑ[ü¶Ù?’Ž(]óÒéð¨<ªJ½\IÇSåÀšÛŒû"…ö‘د¿`y´~î|}ã/ 0JÅž1.åÎ $YG¸ˆ7¨r=Äó)Äq° ÄÐåM¤ªöÌ\X„ N¡J7×þ *Œl™ìãµ%[ákëÌO^Qù¯TÌEŸrü ïÐ ?¤+„n ¼±naŸù‘Œ0Ñâš­wSàO…K›¶œXМs.}'|•_" ¶ñÜ¢O†0áí±7`Þ®’ÓR$µ¥4dPOyㆅ]þýþºÏ%Œ¤fÈÃþÑRñ$15˜I]¿ÔdPœåX94°­Ï©ÏZ›š› ý{!GÁ“–\]“5k{_˜–›÷«9âõž{·ˉ&ƒX É[»Ù4ß 2 ëmÑB.¬±¢i#¯sn× 0¹ã Kƒ+î¹(°m¦!vƒ6ÓgØ¢a{A¡ÚÏ)~žànT=5ƒœ‚øÙÁ8iö:8X‚C;¶I1=F ˆa ïŽàúƧŒÏÜ%îïk§õ[•£N1÷s¼ª{ÃÅ㎠È%‘+`ã\íK4ñ¡Í™CÆ*7™© œÉþÁdšÊÅø`MF™ ÐÛ_øñ¹Ym*OxÎGÜժ˙ª3Ù§“Wë1XBð #ßC[šI/óØlãÝXãÙ1-f"Úaíè²Þµ]Ówë‹Ê£ÂT¶v¶4`”bq©Äú5–‰âÆVšñù»›&½1Z¦_îQ-”ç“ö…}¢y]Øù"ºž–û(+êEýö¿øð *¦ìÍ3g11¦¥ÚŒ³Ÿ@–N§F<¢£Y,i¡+Çß'ÃÅ— MøÉ`ú†ïDoõcbÓ'ÐÿâíN3A"?]ÞC7’TÏF” önqs]×%èöåŒOÏËàÿœ—s_úݳ_õ$~ýz!æ'pÈßٳʼóÊu\DƒÀ@±·‰üæhмÀ.±ï’›uŸU^öo~ħě“@®u^‚½rc°¬×I*AÆÀW&rzòvFœœ² ]¶¨µÌ0Ÿ:<8 =qÚúɼ\¡ Йr¤.ü 9Â…¨ÐõÀoŸ„˜›7Ö–‰ÄLÛðÔz¿Þ9­²XÆÀ cUr%•B¡*ˆëÛ¹DW¶ß_]òíËArøù!Æ>ï8pD¯¬ôÞJ• qõtá~]ù«ˆÅ¤ùçýÀy2¹»ÃaWÅ Kø¹ö_ ¾Oy ˜e34IrDˆÆ-šL-' ­[çàK™an0P?™¡»k§?ÂtySa§ã}‘‚É·÷ßÛ€Ûc¹ÚðaRîÞˆ7¸6ç£y¿œÜ U4æ9²äJUš#'W½˜ j½Å$ ÿed8Orí]^//h°<„£àñTŸÜÁ½“+p1z(é‚ÀÀ-äî‘×ÖÅûmý…}‹jüÿ ÁI•“W¥„¸¹‡ÇQnÒ›-“;p‰.ŽÈU³!¨µµàA]†&1}L[8à;S î±~d†Ÿ"‹ “Ǥdr,¼“/t1ñÂB¥ÎäǼ‹u€×çaÒ¯ÉH¬.Ìi€ù®aD ñ{˜ÁJq¤CÎj‚Ãïï§3‹W:ǵð!ÄI(¹2Û9¸G ‚Z½^™BJÔD‚Ä}«NàÌoB€ÆÉBˆUFMýý(£g$Ü #f¹Bµ>øl‚Î1x‚ÝX/“Lb·5{¸ºˆÝÃÜ­~²ýûØ'ð7žÂ6.1p0³$Ù«ýyn~Aqsþó_ü©_dÿñO¿Èö6û/ÿ§ÿóKùïĘb>žÞ&Ó/ê—_X©é¹êlèsCÔ¦¾ ~+‰ÚìÁ¿OË¡Ï6ï‡7:Þá·aº’ЃþËÓæ¬!ÙÐãs"ðˆÚŒ‰²ç`是]|€zº‘r_o¾[Õ+¬ïÏàÞ šçÁÌpýñ©ø6¸øÁÂ[’—{"ë@Lwô†z‘éáK<Ô‡q{¤mÍù>¸šx¤ þy84¡š©ª>¦Ö\Qx_üëá£M›°ÅÜZí n«k3x1è¼ k~cíSƒì™¾•ê&%Êè?°1zl¶A;?¸­YÒàß‹QÒðIÌ„ÿ¼5ÜAvÉæ…|ngé3È‘ÕúV«'¶€ãËØß Ÿ„Ñúføizb{ïméà'ÐßNŠüm¸°¦áàÏ(ö}ó‰FÔ€¤ø{Èp }ÿ^BßUÌŠ†ƒÃ®ˆó_oa ÔVv´Œ\¿tïùƒB"o`÷¦¨ÃÃ+¸¾§/€Ð-ÂhK†®«H!+ë¨ý„ø3¹á§¶Þm˜ùØ1€m°"x[7y5¬B ¼Bp£#qe$ä׳øÈ"Õ¤þF …K&ãA–üÄ$<ù§ÚœUÐùÕQƒ;üÔlª²P]LŸÍB†Ë±Å³q¶ˆv½Ã©£iîðÎk¿È€}Èý‰þl°•4xç§…&PÏĨ8þ|”—eŽÐI¤ P>ƒ¿gòbCHÈ2!í=¢Ð{?@0&¯¢wÎl 2»ñZ°Ò ›Ô{ëÌàáxlÛTåb&¹1u’C’%x˺+CBÀb ß=–¹ª%’Ã|‚œæ°./Þý6X…RTµkdɃ+d¡ëÍ®B dkZ* ûRk …ýä¨Co bFˆÝqÞJR™cT€¡2ÁJo‡êöήquPØùF¬Qðà b·¿íªÁGæÙ×€º© DG@hõ#?ú¿Êl“«j÷ëëÿzyýe=4®´ÃÞ^·ÇÔß\7£‚\fMnêÃà Û ƒ\ÚN¹ù¾ŒÑ³(‚Ÿ•â%êRÄqHBœ'Z¹t'÷¦h€ Fš-ÔIÀ¬Ã›ÚƪÀõدuk…F}U#ôBê%…Ù6œïôáÑJÎ0¾ê…m*}ŸÔ!Sz£oQX ç·Tr¦¶Hç|=Ãe·Ì ]9üQñè5§«§zpÈIÌ™[/ÅÈÊíÑ.éð[ÛñCöÎá{ôyÌ.É>‘~X|µðw~d"^™zxèžGC²×6cXDtú! ñN…F4Бí„p®Í’¼µûõ]…¤ÐVè7¶ÎÁZ½È¤)KëM"&š=À/gœDËS¦€.è3›6UÔaŸbvÞ¨Gh2tÉI@aÇcå.놑8ýfz5éài‘‘d÷¡$¾ÄÔ§˜ßöª@véSú­)À»rGÇ8šä÷&67lWû›ƒ}bfÓÚ%>[`gÏÏwá;øE²-`âÔT¡/ >Àóî‹Ám¿çÀ‘™“ÓxN©Ø9Lã°Â–6:*GE@¿‘§<ô y³œ¾æçÐÑ7Öqð»Õe•¿[ÑÕK¶³$U°¾ û¨îS2aû :œ‚Ô'â*üȼÐECAsPGm^tžª,±­}y{Á,õ0=K’Ôß‘ßïÐg‰€Ûa„PÃ…H½±ˆ B“ºÓó$(g} #±š‚v媩k¬šRôÞð&í1©¤ƒŠýý+ä (£Üla…G+ò'5¦eì÷5ycvìv¿‡SogøÝ»äÆMžc;Ò¾Õ ¯&Ãõ9ò\Mž wß™J1}`s­œä³¦`¿ù+‡|/LÓB0pkõN¢’®Üûz<& `?:©u‘šœQÃÆÎj\R@›È€( ]N3LKÓó1?AÌÛ·⭿ €ƒ²sÄz¡ÅÖNˆ©c/}C7ºÏ1¸I¯†GibøË¿!žøÐNìaíœuC»qä¶¼$MBÔdzcŠ˜S %W‹6JNïf0‚þþYå(3Ïs½Uykñ‚wȼx–Uþ †É;”ˆQ(r×ÁP—§ヘ1Úž—‰N/šÂŸè…«ôéîY»Mn?Àð¡¨Õ JÉqŠ2÷EXu1œ ¯æ(â7"³A:ó¸ É;àà](Mu® W,à±fz–!G¹êP¤áÓ`òA”!¢ ÁI¿÷™®j)§—Ý=Gk*†ƒÃ6=5H·²‡hXPTT 0³ZŒšzç!“}tŽû\Äõ\ÿ Q³Ì—2nªÚî)C OOô³Iõkg›’mÀi8Íֺеʸñçf9ÕPê÷¢kP~%A7‘@.w˜ix‡DÛ8ó~þj] äkµ.H0¨mÞ¦ÃÑ 499Åн^¯—ÜôšóC?_LáÚî¨éÜ™¡\°9B¡[]3¼Çâ5žÖKNx·x’ôèY÷QÞ8àí¡Q‘­UIÎr¶æDɡnjΙì ÃASSvS³÷”];ÀÚØxô¬L®¢M%܆¾‚$&e""/Èœd„Î윭%{9ɪF¹,Âsç4ç9 ã9ëö䪼/RÕlw5µF>…‰šfbÞ¹ns[a°`OÞ– öx‰|ÝÙãσÂf°²µ¯nΖ¡—Ö+ÅÍa­ro>Åcø›Ó) .­«¼q„ê<·n¡jg^µû³Í™p0_òÒ`¿ zùgyPg>ñ·59Ìì¸ú×9µ†qÜtìhªêÞB ÷EÜj;ÔÇ=L¦~ßE$Ó0azµ¸s¦óÃÀ^Hü>Sê`_åµ`cÑð€yø`Î:䈪M^A=ñܨáWŽmnE ЏƒH|ФCÐ×ËàŸâk¸¶ìR¹.{¦7 !˜š;öÖßåûDáÚïu,Êݨªî^¢HŒÐâ­!GãÛP“Ê'fkê ‘ópääj)lR/8ï,ÔóGhZìT‘jÔ©éÓÛZÛ@Îá÷¸ÛWÄüç!‘T-·ñ=À ó‚Ý b$Ç£*ìb-ªAŽB»–@é„^ÇȘÁÚ¨rx¼åÌ Q–ek{òŽØ~ ²¿ž½¥Â¶Ê?ó¬ ‹¶«E€Š´p?B_A»”‰Ôgp…Ø9}|HsMDÛòˆñèOB9CÅïÍ~ÀøûÕÍÄ~(r¿_Qcô ]´Ñ-ôkTâ*áÈþÜ•/ŽŒ‘ˆ¸?“C¡ö&mm p¤U Ì+ŽêíÃXîÆ@÷ãæSêÔl ö{i}\¼ëxO=M¼Š¼^²ºcu(÷uØJ§Zœ±0ùíH—y»»ó¨Ã¥$¸Wü) ߇ޝÒ_kzfT–¾¡!©)lPß‚pä¾wü U5[€œ/¸|~†ÉÔ EDX"¥-@W:yF×HžNïüõuÖ=ÅBÌXN…[êyØû´gDƒ} <½’„Ðq„®Ñ G–V= /oÏ<(gÄ÷¸w‹4MàJgŠzxh½¥üs×ìÂI¶#ï2à×UÁþÅ ½Ý”ÑùH¦²è{ÅšÕb…×h4϶¿$‰bD˜ }ÞZ }Çýè&ØøÂ»Õ»þýï/9úùÛ˜j§³ÛÁÍíøÿ8©þТœsNÍâQ÷hR‰¶ >^öB×Äî.÷„þG9–ççpPr€uâG1Ó*xž]Ã'ÚX•Q]Úu‡žŽš·¦Þ%°£ô,!žìÅOZGùgi}ßCÁÖSì×1R¸h0ÀA•`¬º“åþâ-ñï`î9ˆ¾¿tÖ–¯Ö\*PgŽÀ}™)Ðå”CEƒR£w„ñ#wÄ€ ÂDuy™n”…>j“ñ@¤‹­)†Ö½òòðÓ]ˆ×Ø”Ïf×QZE ¨ëÆ «Èæ,VcÌ­ 0oMvšú[ô¨2ªxÓT5ªÐj¿ ¾EÍ|·LtÜ3ÁÐvžÄ3yÈ_Ÿ¦N¨¥­@Wm¡Þj³ÝaÅ\ Ÿ&ÑŸ ÆÚ±îÔ\˜1ÂwÚØ*¸1Û Ú oΑꬩ¾D”%·Œ"0™µ°V!f 8Kj‹Ìf±¢—H mAÀr,f0؇g—PTzîÿ(AÆ~_§ ]ºF,áWz †·iññ»ÇÎAW¼íÏT‰ˆ!ÛÅðãá˜k×bN| ' CT"L¢”Ù=õÅûÖF]mŸÌ&D"@îr™È ’Z„-“‚!ÎC§'; iC¥Žhâ Š­žk#W›eØ^j|{™ÿFB’'þ¶Ì°D·À’ÍBˆÉv,@¶³ _uû=‘ÂZx£_5hçH”Äj74¾ûñââ;eèF!Öwè–Ú Íä}½ADJ2úa–“P¸öc }äö Ê\öÞÜ #Õ: EþEO¢¶6 9ó2'¦cíÈkL“ÖyœØ+»´ÀQ)%îÜèïÇ«°8DG ´¨ ȵ¨l(( ‘ù ¿–¡êŠC §;튰“o­3õY¯TÌi‘]ãñ¾s^t'9B_£aœÓSPe¯©ù 9þ&¹»Ežïü>Sé`#€ Ã)&7÷ 2M¿_èüupúeÊÒQ {Vyp$‡$¹g×вê8 Æ+}Ùuš~·¸Až?7›6 nÁS µž'n1y¸%Ь_‹›àU…ô­gÖj &í,_Èh÷íÀqRÚýYrÔuæ¿}ú86˜-  ;&íw-ù].3XÖ*4ŸS?žA¥’éÌËÝÈCØ_!.:ìOiâO%âîáC¡ï0lÁµƒ¿‰‚ܧyίVBàcz¶Üî%÷;û¹ô³ç·Øø˜0ïó¿F†4oGsÁ<%Á$iò‡™ÏavaÇ/ÔT 0-¢ßŰWŠc^vö­Šy7Â8âmt:öNÜ}µî.“c•‹Ù"dœºCYÛŒ²\»Wˆ^NL,Æ`¬—BU,²bûÖWà ¾£%s‚åE½Ryˆs°vé¤iÑìTÞhì‚Ro›$תÚaý.êŠ;Ôî Ôopª¾dQ¡ô:Ëd´) G(e]ƒãøÍ?€ß›¡[IL¦‚ª¸ƒ§$úûXJ¡¤…¡>VØOíù5œþ|u€ß°œ©qÍ­ê—Ô› Ún,b¹Wþ5ø ½/ æPS¼ˆÒ]á¸ÇÄô%x–½IÂñF䛾”èÏÑ/‚åÀð%˜+àBÆÔ1‡«ö>~9jl…M—~¥,mU´Ì齜NG‹uIaF™*±~_áD?6[G_T©šðeÞ#(ÕõDçê 3ª‰rœ‚gò8÷¦¢Xrø) 4òZ9tÆÄ›$UUD}…µM!£°JÖÂô+R®½'o‹lÐÕõ`“Bp—•t8ØK$ò¤}Ôù›ZH,†@ø“s\Dm,Äåk`Ï®u…º_ BøTb [€]Uµ©DÀ¹—€ øÐÜ×›oŸÐ{¹Kd=ê«þDZŒwR0̤KƒMD€ýµÿÚŸL9ðk§fqtí/¤{ÈÒÏKg²ªç~qC£ ¾¤ â)9ëÌXd^Ôó¾jü ž‡4¬uPÓÐ ¶½NW¹Wþ™l‡P Ó1&¦Bø­M“â§ÃÀUƒèqªÃÐá–×Jøùh°ân†Å.ž…ßx CÆŒUì·À™4üíøÚBGúÖsúð÷Û)p«8к-(Dó©TÃ1¥ÂS"Ë_¿ÀïÛóéªAtâ(ôÒnm 3ì¸çL‡j ú 0xcT ÏðZ²ÚÉt±"ô°÷,1dzÖòûÁr²r_}ƒ½Ç ¿xé8Û„~úÉYÿrV?¬~C{ÖΙ šÐ8ñévè]9û»ŽýéeoØÕƒïÞ£ÇJ¼uk8Ò¨HwÖá‘*F…Ù£n='@ï@ÐE"Ôi" ÇÈiÅP~¯ƒßO¨£‘`íø¹’t?C§“—æ~vƒî?!£ÞGJŒ™13•:&§aÚŒ¿«´É“$†e˜™L­¯ÁpÂÈ Ð˜Î3pLûB’'ŠW2;ÑU.85†WÆ àY4ŠÑ6ðßB»-Ë&enj¢æàùð sáqebðûªóp¶h¥2UAd!©ÈÚ]”ÚPJ7.än³‘OíR³æº«R‚Õ/eš PB¼µ« ®ò­zÖÉN•pµ®‡_eŽtÒ·èbÇÏØ+åÀÀõbŒÊÔSi ÇIJðÄ1WzcGtb^ååÿ•ÍÄw­&¸=âÜXϪb¹ÎQ —aè07Máú€y„yÆÏð5Jx<­G nJ²SraÐhìÉk…Ý (Á÷aw ÆVpNx Ç ]h4¼²¢²¶Ž†ê/.ºým¹ƒK$‰LÁJ׫ëŠ$‰’^0…Aß3•j¼Êù^"ßâÜwú°‘`üFÁ/TMü²•YÔü™ót­LN[1Î[›]!^XæôŒìIr®€.‚ì {r˜œƒzbž ˆœÄx€ ™9µ%QPI?¹[œ$«tÒccꟓ1u‘ñˆ¸$ ¹Gïb¿F^#w‹…Ù£Á”N(øñínÙ “7[H‘Ù3D·õ€Õá~mŸ4úŠ xx­b9ì­Ïcd+ïWH1Àùañ}¨%ÄÞI:Ý?ꌨ³¨±hN`‚D„]=¨ß3Û\‰ƒÀ%¨õ} ÖÊm!á5ö$Ì+a”®©´§=B‹Uõ«¯ÑM1`ßüÆ(í¦%÷X£¦Æf¨õÆQš͹ÏAp¤{ž\‘`½ÒV£+â•ížð{tJ!â»ìW¡uÉŽOÔ%Û‰¡ß3è$(†8š({å#Död„‰nÓ…!²©›*^jË»E°föï~‚½Tˆz¾%ÐÌñh:ÍŽêtô%‘Oäm ¿"H’bü´Jì%pÐ÷!–ÅöšxÅ»^/nFy>¶9~õ–ë}Î5µÍWLÕj²¡þw£röFcóG@r‹¢JVQP<‚ÙïZ„ÚÇáDÊó"ÓÈÛ…ÑÿÍOÔfföŸQ¥.&WxH0œ e…Nåûr뼈x«u¦a‹‚‡˜ø•ÛÏ`ÎétNÞBŠ\ô÷ J/0DÓÄG‚Á꯾Aiá÷Hñ@™7êYEC%€¬ãÝZ oûèóÜVf%7êQ‡ÊöµÇúÍœ`LñDPDŠE$¿\(çW31ùÃãr«ÿÃb"ZÂx— Ÿ\4ÎãÀrp`¾o´;\JÁh‰‰*c’tÐfOâË3c~Yp|ø¶Äb?Ê}‹ù6$0Kì[!ð3ÜMÝ>âÁ·Ýe«¼{¬´{Æær‹®tj!Û2Iƒ“ÍrèÑ$0b†‹½ݪgIþ íD ±¯üŽC/á¼*¸eÝâ9^=¤<>ÅÆ4};…—ÚíMÈ F,„xÁìg"à/ÊdìxÅ&¸àñKp~uoü¢Cwˆe؞˦¤D¡ÃÝ‹²ñç™mÿÜàwC`¾“$h"ö‚yBµ;ÅìȯÍóéD“?ø±Lü–NËVH¬ÉEeÂ3Ž©×böÑ÷j^Tµkˆˆt[q¢jŽ$82ß7¶&>t¥Z—6ðDAUCá÷ŒZ ´oµ$½Ÿk¸I³fõú Måêt ÊSô$¸p}BÁväÚ™§¾ïŠÌd˜eß)†65D<ñUƒïUPÔµ3¢Ì2’’ïò?B/htàQQ²¦ïý]Rü%ÓóÓ’’&¤¡cŽ l~ <"hÌs;ÑUPß] M—“œùäÀáGFÀVºÄnë-U•¶ú¤r ê”:­¡n ½I|Zç*ºÁ,¢Î8Ô=5Øam ùÖXn…ÅèˆùŠà˜§nPUdp„S ÜÜ"Jôi©ˆK\Rjî^{ e¯ <åÐ/ l|BŽ1û K5[”LÛ5Bø„å!ÊšxM]R zî}Z5'ÃðI à`T? ¦sÁ:qžu(c‡†üžºÅH?'=oϬìt¹ÈÝ^v#R*,+•q¯ì'Ôeuþ Í'ÐG$iÿ%fØ›{KÀÛHÄÀ—¤Šíá“"D[Ê}\Ä}x¢bŠñð3²`ár‚B¨÷êB7ôçÁ‰Hˆ`^yý:?”»‰Þð0OŠó(” KŒõM:¨ŒØp:#kÍ®¬Í5½#%îsÚÑ’¶ ÍÒ‘7ºØBA¨ÏA4z] ß6ûGª¹$k]:žUGUé/z+él¢PÚaptÈìý๯¦AëÉÌâ}³/ÄHÄ1.eÎ Ê" ݘh$˜r:ÄX)Ä­¬uªï:U‹ZÆÍ}C9ÇWéïâ´M{dÊ øTø .±iî§ ‹‹ò|l³PuI„*ya1N#¶³éUNþͦažÇ(,þÑ´§ © ³© ƒòß01›MSùI²ÝÕ”sƒQ•¹JHÙ+†"ü\­C+(ÞÙ’UYΦ³Ü2XôÛ!´FðŠ_³ áT2›¾VMUU\å 5¿I;ìÙ4Äú¤AÑ“S°uåÎo ["pÈlz·ÙT”ô4ØXÐó?ñÂ_“‹¾–_ÆIiù¬ #¡x®qM.Þü”c9em¹>¶UâwžL¹Lâ4›Ç‹À63õÚJ, +‹8˰^Ý1,OÆl­<Ë9ˆ·tâa«ƒï¡üàµÙ¬Å±Ó’ …€­%FF“ðÂûÎË^¤óãÕQl“RA’,|‘§.ð7¦ÐÊñý(<é &£Y(yëdB*Â]OØù(U™`G.žwË…6”¢f©@ãIê[„J $+-1réè9ñŽÜ 20k¹õL3ß¡{Öµ7†kói\ãO HöÖÖ»‹Û‹¹¤5ß7*%ëE}Òò«´äò¾ù¨(ªU²/×–jED¯­3?yñCå¿J!|Äèƒv¾/ú„®²àv¨…}fÇ.¢p[kJÂMãM> -m~Ø2ºTsJ8¹ìUA̾UÎ T°U6#Û÷ÁÜç!d7òÊÚÿ1𤶄F „(/¼ @ʾZ?7«äƒ©SB4JûGKø“Kr(ݧ~©éøïs'/²õ}¡ôEkS3#ß¿ 1 89ÙGÆ5u_sfš÷…©Ñ,–÷«9óžyÕÝG‰NA8mÄ[»Ù2P0lê­¨BƱ"Ý*#­sf/ (µ‹ Ib+æ9%mžn_Îe .hÛ&ÌBû£5EÏÔ §gÆPP©S Ýô:åÌ^÷;¨KÈÃÃ6)¢7¿‡Y ´‚«sâV¼«óÚiýV嘓Åý­æÞ0±„ƒ! GC Ð8WûRg0Ëùð·¹;ˆƒTå&3õ!©1'É“i"oÛƒ5a¼úA?n§ÀMc*r,;ê¦ÓePÔ™llÓÉ«õâƒ?õ&زxº‹Çfo¥ÍžX1€ÐiéD—õ®í ›¾[·P|J¦²µ³¥âµŠóô#:°¯‘Øù7¶Ò¸gØÝ4éM¨2ýrix<´/ÊíÌsðBÅÐõ®„ ÇHQÕé—°«ÅGOHéc·X&Ù8[á1¼ _œã0°t:5â ÀA¹[þF.x°·OÏ(xCy«›>A–ýowwú‡½5Y?ÍȽA&<Ó»ÅÍu]—xÐs1ˆF%ªÛ½˜¢º-Äÿ-ÛožŠ6ˆ‚Œáð9Û‚~Ë+Uø+Ÿ¶K£7Uõ_ÿPK8šŽš÷C'½PKY:CGHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/01haxe.xmlUX ‚IRYÉCRõ•TQÚ0 þ+Uµ×6ìÆB$6®Ú¤=œÛÓ¤)S2BÒÅ)ûõsK(9 ¤í¥©ýÙŸ¿Øny½«l¬¡œ¦ƒ|0L“¦QëiZ<Ÿ†Å»Ç¬OŠìm1˜d“b4Êf“óñìýh\ÌŸRÁKk6ª\­ÁxµQà„uU¾•GèKkõNùî=å9ä,Šæp¨¬-8àìbò5`éTí;ƒ½²j‹>S½Ô:ñ§¦©±R&¸ƒßr0küÖ:õG¶ äÁ…³ûdoézÞ5 ö ©{‘Ê{vö”Ù'›åÉçs*8Ößá!³x¤[\Iû KûŠ¿AÇ´Zu©}ÂÒ ¾Ñ²B:¬ÖöeqÚ¯¬VåevHjY@kYîd o„{*ãÁ©©õ,†§²¢/ÀYkv¾sß0o›ð¼–~{#$œsj`I¤§g Ë~M}<À’Ü"vp‡·–Žæ9Âp#O¯øž¦ˆ]ál…V7>VÂ.¨k}Fâ‚ò0x4!ü<Ô¨’ˆ«yÞµÿ¦‹ZÝñ]í^g¶Vî9‹âEouž§æ¶;¤4dZ¡ƒ®üÊ{M»ÔÃm$m`¿/Þt@kõÞ9ÌMy@UÚ²{h-obóÅÏn=#]•³óßGüPK õ;ÿì†PKY:CPHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/02neko-contents.xmlUX ‚IRYÉCRõ•”QOƒ0…ÿJÓwÚÁâÆÃºÄLâ–˜Å}&DJ‹ôªÌ_oqÓ,&.í[ÎwϹ··]õmZ!(4ÄôP²0¢ëUE”  ZDlÆf6#%ZÐ\AÑRR j0¯*JzË,âåÒžPPþh`0ü(ã÷ƒ~ ßæ#­eÛ Ù)‹J ÿkÐ ZåÒ%¶TÕHøIÂnÒ,E=Àÿ!æó0Ž)?›íõþ6I]å*ä[y¡ú±Å³¹°g×Ú“:ëtéI¼wN¯Nlž¾s•{ºF‹ð×én·IöiâÌv‘M&S¥”®&eï.÷¤æUúW^ÈÔŒ¶ðw^1:É –>+‚ö=W‹j{¯áØi6~–^zƒL¹6ýi7Ûµüô.øùÿ¶þPKŠ/îPKY:CGHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/02neko.xmlUX ‚IRYÉCRõ•TMÚ0ý+QÔkâ@»HÆR€]µR+A÷T©ò†!¸1vj;,ô×w’˜à•@j/¶Þ¼ù|ž„ÖUi`ÙŠyO“|ö0[M§Ïùb3Zhµ%£b ʉô)Ó=?Awl´–•p©‚J'ã4K± %7=‚±B+Ö’%H·` #j×òÕÚºD(블‘;×0•VF ün„¼q{mÄÞ Ù;?}ˆÇs¦˜‘ïË‘w® ¨È‹Ñ¿ p–|ÁÆ#ßyôµC†²DÛNqM:TØèùkˆo]è°ÑŒî$/-^ZJý¾>Þ´Å7¡*‹ÝÏÖ¼¨x k§ ø9…r`—(= iF±, PÒÂÎÖëfS¯P#Î/ÜíÓ¾­À>×]wÚPd•%þ8óå”q¿Òƒê\7k[ Y‹ÌX «ÁdÑÃf¸ý¬àaߢR·ájÏŽ¸2§–0½~1=X(‰y_ƒ RÎ!˜ì ßPcR2åØjë. Ì 0¸j˜}*5ÛŠý~ìkû®æ¬°Zv-s{ýí¶¯¶å*\ãÇ¡Iç\Ö¡ÊÄoÊ||ÓeL÷`àSxþQâ§ŸûÄ7á¿<ðóSñ "þÀ×Ö“š9 —ȇ^û¾SŸQ€óN¤’çPK"›gyñœ PKY:CG__MACOSX/Haxe Toolkit Installer Template/._Haxe Toolkit Installer.pmdocUX ™IRYÉCRõc`cg`b`ðMLVðVˆP€'±ƒøA È@€+PK%í!Ÿ(RPK >C/Haxe Toolkit Installer Template/haxe-3.0.0-osx/UX ‚IRgIRõPK>C8Haxe Toolkit Installer Template/haxe-3.0.0-osx/.DS_StoreUX ‚IRjIRõí˜=OÃ0E¯C†ˆ.½2„‚øVU6„;”V‚‚5©`ÌOçÙ¾…H HL©Úw$ç$~þJ€™¬çg€P Ù„› ¦YË&¶ñ€ËÓµä¾aŸë¯Äsñ£”û”üç8ÁiL¥”­$wüG¯Wìµ7>ìÇREQv“TŒ††¢([H˜íé&Ù0žÑy«Ž¥íé&Ù°\FçtA[ÚÑžn’9i> {Þ^Œ¥íÿõÊŠ²7$Ù°þ_ü~þWe‡1ùôf:Á÷ CXk¤»Mp5Gw¥Ÿ…Gø‰;ÚÓM²ne(¾PK§N¼PK >C8__MACOSX/Haxe Toolkit Installer Template/haxe-3.0.0-osx/UX ™IR™IRõPK>CC__MACOSX/Haxe Toolkit Installer Template/haxe-3.0.0-osx/._.DS_StoreUX ‚IRjIRõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPK j>C:Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/UX ‚IR˜ IRõPK ú>CIHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/UX ‚IRÈ IRõPKú>CQHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/.currentUX ‚IRÈ IRõ3Ö3Ô3Ð-JÖ3PK€Ãþ PK ú>CTHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/UX ‚IRÈ IRõPKú>C`Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/haxelib.jsonUX ™IRÈ IRõMAOÃ0 …ÏôWX9C ì¶‚Iã†&ê&^H“)vÇ$Ä' cp´ßç÷ž?›3p"µ5â¼ë_wDgiN^A‘Dv˶-„Žihhe¼3¸:Ü­êJpà<¿¨ÊÄDjSTKl’Û‰‹¡=GþEï)ñ‘Xè+}y‘Œ^T%‘'d Qjè­;Ç<Ç“º_»ÁIìßÆÒ¾Ó7Öæ›Îxd^¡ŒH<•¸_?=Â6¦ EÃzBïa›3X×tƒ$×ÏÓÏ=š÷k¹< †=© oȹÿ¦ùj¾PKȈuÒéfPK ú>CZHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/UX ‚IRÈ IRõPK ú>CbHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/UX ‚IRÈ IRõPKú>CoHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/ConvertXml.hxUX ‚IRÈ IRõ•UKOÛ@>Ç¿bk!a‹ÈÐk".¥íµ¤ÒÃÆžM–nÖÖ>€å¿wö?€C/‰væ›Ùù¾™Yw´þK×@LÛ ]mè ¾Zf|ÛµÊw®.u+—YV ª5¹hå(s¿Ùk6ëìJðšhC þ1+kÃ[Iê*¸DÜâÖ(.×%Aüìô”Ü‚!¶#f¤F­0äòö×&Q¶6Vž¨"x-9÷Q³\Ò-ä ’çs´Jä¤?b õ`èZãñ÷Ÿpl@׊w®¸kÔÑrVUŸ£YªA¶f˜9!•5­gî@6 kÎüºGëÕòT¯©Òà™ÞÿüA¨lˆFòîìGž/[4Q¨ªsð Z¹ŒÞNµPD ®b\is±á¢)<ÂiT9mБÕLôê!Q )*éÖQØ)Èií¬U¤m„Ë)Ñî;¤Ÿ¹©7Á_¹Ÿ»]Îܳõ$¿ Ø‚4 o}v……—Ác¨ë(êM¡X×䪳zÂ}µOyé‹í­•/FÃ^Nå&9“2J­(Ø4|9 *a‡¬LV¤˜Ü:šÚQÆç?3ºiÕ}67bq~>äà0ïQM¢ôHÎHq@"Ô QBóü€¼&Ü„á>|ç€5GZý2Í}]ó~¸$¾iöÙ£_A· ð9‘þ!Áhgúà½êivר˜ñ…,¾îðr^ÏqÒ±sžçáùrRè•SžIø‹eAe½ªhÓù냗$¢}[n¬£ïöˆ¹%J*0'öW—‡rb~Já%IéçIñAjF…gèÖµ4m Õ§ ½YÙ¡É †ŒJòÍ Kâuj’8ä„䄤)˜´Ç};*í…âlW¼Ÿ=„úNF–!óÉ1æ=b¸öGžÑ±úÖFÜñƒ< Ø}pÆ–£{´ûlÿPK|ÑøÅéPKú>CiHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Data.hxUX ‚IRÈ IRõ½YësÛ6ÿ,ÿާ–jšvÒ¹g×¹‘%:f+KINšëôjˆ-&¡!)+jÆ÷·ß.|è»ùpÔ6€ÅîoØ]€§?ÀЋu=ÌrhvZoÎÎþqòæìõ¸a_8\‹e°< Rñ§ó(Ëp¢ f<åÓ5<¤,Éy`C˜r"ÆÒnC.€%kXð4à bš³(‰’`ÄÊG¹DœÏS&Â|ÅRŽô°,~Ä%Â_Îy’K F1Ï ™Ï8Xc½ÃjÙÄ EœÅ%@ËfVQ>ËRžåiä‰üx³Gó(7ŠJÒ$ñ]f¨ ¡µa.‚(¤ß\ê·XNã(›ÙDÄ}ºÌq2£IŸ'¸‹x¡B§"…ŒÇ11‰P©t‰Ñ–J£ 7׿’¢W31'ZbT¨„æ —i‚‚¹Ü4Ÿ”û‰û9Í÷PıX‘޾H‚ˆTËε'¸Î¦â‘Kµ”ó‘#j…<²(=­—²C¦\›…GÒZ¬¢YJ0²ã!Bg,D*ånjì7.Œדí‘ Þ†£Á{¯ëvÁjqlÙðÁ›Ü î&€£vò×Ðî„_½~×÷·áÈa0"nÞí°ç¹8íõ;½»®×W¸µ?˜@Ï»õ&Èw2257Ï¿[wÔ¹ÁaûÊëy“Òk×Þ¤Oœ¯#hð=šx»^{ûÑp0vD9÷½þõ¹·nâ `œ÷=`|ÓîõH±kß¡# ÁðãÈ{w3›A¯ëâä•‹øÚW=WICí:½¶wkC·}Û~çÊ]d$•$J>ܸ4KRÛø¯3ñ}Ò§3èOF8´QÝѤØýÁ»6´GÞKGBÖÅMÉ·ö]ň,_w’ÐønìÖuÝv9Ži•žœ|z°`þgöÀ1*Eœ93L*q4½8ˆæ@cç¯háŒ8 xº=ï&yº®Oÿ‚‡ãâ`™QhñÔ%â}qp¯<à!Üe<õ’Pdp _,…„Í9œkú 5.ãx×<Ÿ³(Þœ\¤‚NW†óí4eëŸÕêÛ‹ƒ§Rð{<¹ï²1nÉØ%×sJuYe¾Â{¨¼@¯€gþæÜŠO³h†X%<ÝœÔÙk Þ2}Túm®èéÒ6U;¼ÕD9{ ‚fʶÛPLÛû…zìRy{tðc¬:C–ÏöÐw¶£%?òXPÊÞRn¿Úzç‚'O|Jœšâë–Þö`xR†“ˆ¡Ër†6;hÈZäCFUÌðËñ%XúÐ9ŸðàX»(»íU ¿ÌãÝtÝA§Bеy?éÈÅ4éaúHä²pŸþäœí&fñbÆ’åIÿ{úŸßÛ'ÿf'üóOçäãÃSÜS!îy·?Æ´x ¿[ï†=˶zê×Õ¸‹?‡’=þ)ßú£¾«…;zïvÿì·o5Ò‰±ˆñ&ºp™Èž2òfý¸A‹‚µ…Mxe4pæ,÷gM¢kA Wù,+°¼ä‘ÅQ –âZ.OuLtˆ°‘ò+ºdïd‹8Ê›–cµœO"Jš®…4Oû±-“ýèvp¶ ÎÎsœÉo}ÜÚÄÓ4­ÇäA ·Ž­ëXŽG”έoK‹…©òŠeœbp‡9²¼Õ¢B‘6!¤V(ÔœtC¥8x¶²ØÝ5CÇhaÓ‰h™ q¹îÈÞ%mžÙ•¹˜'˜NäqÒ#²Z5Qÿk÷:”ˆŽ-l¾°o~FÛK^Wø»Õ,Œ»Cß—j«N«C£­*´Î2AVͰåäB±i¶ªqˆ•ñyð2cï€ÍòŒûŸqò ±IeTr']èF8 (o]Iß«bÝ¡¾ßV³Ñ˜¢Ÿ /’¨r³BU=½2“ƒE°ò-!Õ­ ¹¹QÚNºù4 C[Z㙃&i:¦í4j$mhlir(ä™S°W˜p-c²÷TŸ(´ !s6ÎÊRV‘upTņãMæ”!÷À-‡¡Ži¾å2A“´É 7hkI; yÀýá× O÷¥Ž.Ô$ÃnZ4²i“®hµîS ®WìFõK¦Ì?rÓT¤äiÊÒ5vžŠÅ|Èãîi×=ð0Jä-H©èHHªý˜ö%óBaO¬xÚAëª8”0zl> ˜a/ðe6ë%Ê6|ZðN^× lRëð«‘ódÑ/¼¶ÀÆEbŒ ‘Ñ Oà]LµŽG -¦’÷UËþ§²gk‹­˜ë^hVäò"Ï«|N2k]‡üÛ–ÊhëÔˆ‹bù 3<Ýœø¹–Pݪíß5*¬áPY‡Ê2KÀzsÎîq|ï˜â°”•ø|‘¯µŸè¥’AÆçt“ñÅoF,Éõb–EdVþØ Šÿ;¨—Ÿ•Ú ÃŽ2æž Ù”KÀXYù3‰q»òaÏTÙÙ‚ûZIun[€k¤3±Dc"âúÉzîFE­7ÐSõÞåõ™+ 5‰—@KÏ‹ÞÒ±G3\Z:6×É'ÝùS7 øË:o:OäÙ’ýòé©|qI¼†<Â.ãÞ´j÷òŠj×X`ÃjÆ1pè¡3KŽÈ]8”Q$?†L×JŒM_µ!AKÄ1EP˜Š9Æuø±lÎeS ¨­þ΂½K#aS‘}”ßb6bPóèQŸ™ ¥fXÉ¢6EvJ<§=ËÔGy±×}L¡‹”?ò$'vH?W¨c*ÇQ²¤€FT!¬8z>Qp’ hK$¿a<¤l õ¤… àÒ2s–Ó fœTœQ»iÌ’ÏÚ£ú!M§tnÓýÕ%uû-øGàde W¯6Ø{YÒmÅó^øJ^ÆTÛ^$6C!Kîyí]x³îÊ+SnŠ®$Õs;,šU89fuðEZÔqGa§¢N¿>>¯ÚþìDX%(‘ú„´Öì)°$p ¬ÿM°ÔÅ7 J¡¯ÚUsÕÑýª¯•›•¦Šõ™Â´P@õµ@±ÔšAU5K5  RLš¤x¼ÅV¹x¶=/0>U^¾e(óÄ}©¯¨Ë4V ;BMÄ6Ê—p³•i´ ä¸ŸE…¨ÎªnÜM£np1ýoÕx»Œv朩Wàëx¥ì^+LUàæåßpÓcÍé‡ꓲkÙb^\àñ]ò9«¤à_öFB1³m¥÷4XËG#ÑåÓ¿þ˦Ùò‹‡þËV•S~ð _r\~$ÐUg+ß.6f$Uù¡¤ønMżòA¤ø[®èOôKc©|¡¡gkŸ7è”Pä«g°§ÿPK?ÖA% { PKú>CwHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/dbconfig.json.exampleUX ‚IRÈ IRõ«VàåâT*-N-RR°RPJI 1uÀ¢‰ÅÅPÑ"š‘_\ÍÉONÌó )‰%‰I‰Å©`ɌĊԜÌ$%^®ZPKü‰{FcPKú>CmHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/haxelib.cssUX ‚IRÈ IRõVQsÛ(~®“¼Üu"Ù±­¸µŸ2ws£ƒ’h0€j»ûï· !¥tÒ‹'±€ÝåÛo¿]eµþˆŒÕ]i;MÑÇõju–ä†~®>´X×L #ÚœV&„‰zXYzµæ¬GTRa©†ÍJ ›U¸eüfVÓsW6Ô¢Ö<<,Lf¨fU°4ì»çM^( ›g\~«µìÝÇüê4ÿ㡱V×ë_i.u½fmíësý¥ÅLä5«þDš*Šmv=­þ]åœÖ¸¼eBZVR—ÍYjBµ»P]‘‘œôøúúSsP8y‡%ÄR¸¦‘þáÎÊø4a¨ða.ŒØV‡¢óËJÉ¥ŽYž~….kå¬?Î4&¬3(B[å-Ã+ÇœVŽÑŠKlã2z.Fï åûÍ/›€S¬{ÿpDgiäeu㽤ðÂÇïÌ0K‰·üµ+›QQ„–Rcˤà ¤ >>6ò;Õ#ȉÐI5gƒióqwmÇsp×·i×fö¦àzh9«øn2®ÂîXŸ‹$ð¶ü’¼X¢Ø£<-^èwFïŸý½}@êáÌa/ÉÀï ãÆ·Ë´=6Ÿ‹ÏŸ^OoïUrlÌd ý¹Û¼Ëô0ûÇ„`Ó@¯>¾¼¼Ìøßn–æÒöþ%RôŸ4ßVIm[I`^û `’ bÂÎ9õÍvœ ­Âêg]/˜ K‡Ã!^B’öšb˜w“Ë&’|Üï÷I;ïµí»§LhëÿPK¼šu˜Ð PKú>CiHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Main.hxUX ‚IRÈ IRõ½}ûWÛH–ðÏðWTôeÇrÛØ¤{fήÓt–é°›H÷ä ÙnaË Ä–<’ a2Ù¿}ï³² Ì|>}‚¤ªºUuëÖ}WyøÝ¦ùÎì‹»2»º®M¼×ý~{ûO[ßo?ûÞ¼N¾¤æU±Ì'I9ÔÄÊ'i9Ϫ >˜¬2×i™^Þ™«2ÉëtÒ7Ó2MM15ã뤼Jû¦.L’ß™EZVР¸¬“,Ïò+“ ¨1ô‹•ëk€TÓú6)S¨?1IUã,fRŒ—ó4¯i fšÍÒÊÄõuj¢3iuû ºš¤ÉÌd¹Áb-5·Y}],kS¦U]fcÓ‡JãÙr‚#ÑâY6Ïj(A ”TwYÁTp´}3/&Ùÿ¦4¿Åòr–U×}3Éú岆~§9´BX0¡aQš*ÍH I»1öiÒÐÑ‘[ º¨ëÛëbŽu kº,sè8¥f“ÐGý~JÇ5~AèÓb6+nqŽã"Ÿd8µj$«xåÉeq“Ò´xñó¢†QóPpEn¥¥¨ºN`—© :Ï[‰7³‡QÕ@,Æ¢(©ßæŒ:Ž×æìøÕù¯»§æðÌœœÿr¸°o¢Ý3xúæ×Ãó×ÇïÎ Ô8Ý=:oŽ_™Ý£÷æ?öûæà/'§ggæø¡¾=ysxŸöÞ¼Û?<úÙ¼„¦GÇçæÍáÛÃs€{~L} ´Ãƒ3„÷öàtï5¼î¾<|sxþžVíÕáùB~u|jvÍÉîéùáÞ»7»§æäÝéÉñÙ b ½:…ŽÞ cøf~söz÷Íì Áí¾ƒiœâ@ÍÞñÉûÓß_Ÿ›×ÇoöàãËßîË7ÜÌnïÍîáÛ¾Ùß}»ûóµ:@4I¬ÉÃ4¿¾>À¯Øë.ü¿w~x|„óÙ;>:?…×>L÷ôܶþõðì ovOÏ`À4ÇÓcè± Ž 4=:`@ˆùp  ¾¿;;F´°û ža{¿>.òps‘Œ?'W)Pe1«×ÀTfÙåóÍÍlŽÄaðÃ`\Þ-êbðvò§çÁ÷ïÂ׬œ$õuøñoÙbpš&“´´ßƒ®ûIآꮼ&rvWÕé<ø ÐýMªÁñ醻¬p'Á&ϯÎ>|KóåÜìæÕmZš¯›ïSø¸qTÀ?»³ÛäÞ¾mnŽgÀÍÌYV§'eñåΤ_ê4ŸTÜC™ÎakåW*û18¶Ù]d?l ê]'«B00ôãe½6öussã&)MaF¢ç\0^–Pt˜ëû<ù¼ÃÖ…éÌ«Y‘À·Í bqc`89ñN“§·qÑÅùn ›fÇà”7òŽÙÆG²cÎ3à“x›/â.À46, Ë»:­âœAaãގɱu6iX;ð¾ÖÒ…o°`ƒ ¿Ž¡j/âÖe„`7ÒY•¶TF=€•ã¨wVOX€%ß=ÛÞlw‡PØíEÿÒ0ßÜl3–e6IÝ´oKX—Ði<æÿŽ‚'ôìñ ª¸ê/ú3†‡ÈGzpµÜ/é¹Lk`ÿ¦|¨£ñ¬¨Ò˜ÁWKàçùòœÆï½`ç5,VsÍ̄֩)pýƒX4CjÒ…¿Ï¶¿ÿ#VŠkzýJ¹Q†Ð*üÖq«í·9âÄË|1Kë(3êy€â>êaG½¨Âu&€½è?_«îEþðº.Êt)ž3šˆîÌœ[­ìºÃ|eßæþ¶Ë¼mG%²«E첺¨õ½}‡™¬O•¼–ÁÀ²çú†e·Ñ;VÞÁ&M¸^IDëÈnŒ®N dªLÍJpãÇ®âËå´CìÏÒÜõó9è'¬äõùÙïós“mH%“óúMˆd"TR’%¸+!½!@.ê®é™è_€ ˜ncÝß‚ºJk[¡j868‰_@b£xNç¿ÀV)¦,â΃gƒí­r<ø¡ƒ¼F»'‡÷¶ƒÁ4›œœí¾=€úƒ(,<;8xP†Ó¾.*¤&¬F²cP”WQŸðA¬ü_·ñe’!ã¨`YÎð9Ë'é—ANŸ’Eƒ"moä w0O>°ÛQÏÿ˜åE ­¾=ºm¿)Xà®ÎnY&w?òLRTÌç n¢‘yzó_MžÌqksµ>*ýÞÛž)²‰Ùú‰þöa‡à¼^‚´4ßhLóÍ‹ÛyŸñ›Êßç>-áNcÒ¡ÑÂÒÁà#î”J:ЬJƒåÝ‘L&{\aaf³­ zêýfs•ݤ9X—eR‚Ýú1~çwT˜§%(ø‰¹þ2Ÿ‘u­À£àø§oè@HÀ=-0¨5M@®€X.ÀB›¤P.OHžÖÂj† ÃÀ0zÔf©Îrµ)Ø>ÓFó3øä@ˆÊc²«®@=éó4ä‡&‚‡7LÃk1Q¥ˆKø@À¿d”å–`ai †,’ÌzHI9¾&`ø KãVvžÔãk2vÍmQNV'•åÓ‚¨fZhk|.ç‰ØLysz-‹R¥%âþ<ƒª¶`ö }$ìò#4FÂoo †X«žð€¥$rK2r#f@mÔ˯Érá­Š’Èç6qA0êëµëF.,` û(Bc^þ2ÇÍ(/ q [ eýö îÕ±AËivÅðà`‘4a÷À#Ç%…øÚãRÐ3Y÷ïÜr‰´ ÿâ¢,Ùµ*Î8›fv·Þ‘ –ÀEaÑÖC›ãÑC=6BU‹jÍÖï€Izeð¯·jð–Ίzl HœtLâ’ò:¨WDRWDO@w>úÈNªõ»a‘yTËëu]/ø3·B3#Ïj b™À'_4¸RVŸEº€4¾P£á0­Åð€0è#ïÉ^øæ×„¨"­†ô € öÛxr¹ „øs™È'+äâиÄÉïyžÒÔ°¡¼ÅÞ0ºØÕŠ‘FD“|î› PŠn'¢m¡™†²rêÛÐßOª½&êVøÀß{½¡N†@AE¤«f_ÐËo õ—Ë) à ôyÙ¯If_¥õÞuRÆLRÜzcœT)(z}ó쇑¹µóós÷}<2 êv°ÛoH·×Èâº\2mnˆ)ƒÔy¡Â-ê}ÿæ4VOUO²<î’®û&ËÓUë7©>Çæ¯Ë´¢72uìZQà°¥ucî†ù0ùh^æ6ñš®Í;Ê£‘‘‘’«B¿ß¹ïìÈЂÄ¨[CpåM õVÚ9^Ôñÿ½ÜÓ·õ…B§¤;¥¢†¸ãcRU9\óØ*œÜŠÕMjˆºæTLü÷ÛÊÊ-+`Ž2'¡ r•¿fü6É¡Bip«ªÒ[Li ³ï··ÿŒîõšîu^IgÞabK¢ü Ãÿh>䑪>† ö¬JÍßãÆ`×ùbuØ®GÌ­èÛ€ðÓïêþL¿dµsdx¶r1+س'éåò Mûî9ëÑž¨… É4€òÕ…f ½>nÛ*'!9oÑ¢ÕÖá`‡o¡ÿzžËZêÝËÏß OTæ 0N¥-™ó ÀÛç`Ý8ÿ=ü¯˜$ÅÅðbØ}ø/xúØëÆ£Û[ÿ/.†/âÁwݧCnˆ³RHkŒ±ƒ® ìû²¸5Ña~“ÌÀ òd!+z¦õ°A/êD Ë—K;F€¦“øû®ëË}ý¡kžHßðeûj`/W)w±ßl@®þ(¥ô‹¦¦ßím·&vUØ6øƒyâ• ‡åWÐibxÝ®'>Ѽ‡oÎà¸øÓd9«y•xU¶¶ž7¨HÙ™¡óIë""v¨ÌGŠìúûöµ£M…M‚J¢ÖŠŸ´RŠ> ôl±¼mŒ*ß6¾™1‘‚A>°`Áöïú`¨›øý¿ãBÿV¦U1#ÉU²ì é êyT»þ)Ø@CÀ‚"€69™¥Höi^-KP”¯Êî ØØP˜–8ú±Ý0ŽRþåA8œb àªyUo´ÕòÖæ f\c[—©ØLž²æA]ð¸&êô/QIåˆJn2¨EGó="CŠlW bÌ µëŽò[R}ÍØä§j꾦,Œ~°æ=Ìa ³fX§{ÒLXG·зŽ"d»ªø+ýFõ9´-0j·J…Û Ì9LŒb®Úµã†æG!àŸ(Š˜UÉ%ZEÂ*74f¹Â76òôs1üs%®§Ú„GЬ¤bµ)U¦± ŸÁ³à·»V¦ú.ÿœÃâëÖCÑ5ŸP;·CQh ‡f þ3{ÇoßîíŸÑ[ó¿ÍMã¤ÛñžpC««ÀÑ{¦ W‚quýjûi5ÖjxöË~M/±o-¾åW¿ÆŽ“k ›û5Žoó´Ôò_üR1´x¸8qüJ§)1Ê74°¶Tµ )ì±í†–ç…u • fbîÒºëiY7¸Ê>¼ Ûͽ!°Æøèi]7$c°•«-3-½Å^²XÑå~¥ëךÚ.› z8Y·Ô>LAâ5Ëß&ÙLËÓ9¼„K(dÛD/°8LGx½–ì}œ.§ dE{]¬`L}V‚5ŒÈi!ñr’sKªåµ[@ÀêÖó€rìº:ܺà«[E¦«ðJ¾¸:hòºò4€‘Åô­ª•¾wµöÐUνJj<£&Ç• a¢:*T˜GÊRŸT3Ò£¤ÿ·“?Ú5.&iŒ_ºêZ”þÄûXÖ§I÷J+ ‹›¸c§ GË$¦½{ŽA²)’ ŒÒ£]Ï¡"lckü-[@ú“û¿³EŒN ½QŠ¿Å­ëoŠ›aNµ<$¶*© ôÖñç= aÆU ¶4(ÑÕ@<`À „ðwvž©ÄÆFkV„ÅÔÈŠ: gsƒI!¢^9êu2ˆ“i «HmõiDg¶ˆTé9Ø ,Z8<Ì“7Éür’€ÂTÅM(ìaî;D%J¤*?Ë™ê(½}G ˆ[ðT¨`büOº$͚Ƀӌ@#SÛ¡)x_¬>ŠNé0»)ðw£§±ôvµBÑ °ãoe!ÍÈ8”{Uƒ=Ѷ=¸E !€(GëQ}i±Á³2±µél§8~F,Ü?>5qÜhöue]…©ö¥¨ ÚÕunÆô‚z-«ï”+O„+ixõ<Ó^7˜§sL´¿®µò'*+I¯D}ìq±Ü‰Q ä{B ÃE.Á¾±˜ëÅ*Ì Ñ:|ÛõN²Ã¹ªVÔ³)n*Y8ÚÖ‘gÞ0>Š3ÉxÔÊÉ &UV›²¹*Å$ÚŽ6ƒìªø[`#НL6%Á |‡Åêh ªxnO4ÚÑ‹‰fO§¤|Â%%b^å°ð”pê\;Nêôsc‘f]ìí¨h¸=v/‹²«Géô¯Ë£"VL6aëô6Ã8&PdM5¨l¢$ åŒNbKú¨#²J)ùQ,ID8ЍkñGã§ØÆBÛzdßуByHÎgO»àzPäeY OVA£ZaxÖésóMëí³<$–Áßptçe’WÓ´ÞHaã~6éã¸\ªÊ½±ÿŠ€ _<õè ЫGÅðŸ(x× 9É­NrÆ¢x±ÁœJëäsjªbÎ&et|GÂ-üŸdµëéĵÅÙø=ÎU÷l{›¼u0 Ih¥h AÚh&ÎëÑÆ¼ºRâ0Ä€Ð{;Ì@›ëŒ<1ÐÐåaþä°å‘6¢G±2›QàÙ†â¥Ä[óÝ€`ÀÖl¸MÕAìØ+æ&à–"(_•Å|w6{ b?®a¹±Ž WrÀü‰LHò×5гj_Àu„é¼d¤€ÞØ¡7­`jCË…(…³ËGÊ—®ç$¨‘¸I™Á{Ó£¹©½»âMàa¡"¹:*üšp†—®Çš@ͰÿIq(#@Ç7Ô&ÁìtË•q¨h@ÌE8ZR¡ë,g!£ å·»Šä‚ç˜VHž/¦ú‡ìAþÕJa/V£Å® x¦ØÙ(}ú^CÉÚ’9Çj[ö¥¸ïIùUó<Ø=^XutÂŽÔó¾yẑþÕ36èÐm+BóÝgV€ë8A~_‹lzgà':ùhä:w˜³rÕÿHÊd8*k6Ušû\¡n*3«ºLèæn*2‚ `2`é^{ºŠ<6Pû\EBt&ž›Pû³;c$²J$8‘~w4ÓZ­;`æ50dxX¯Z–§¨ú`“Aµ˜3Ž8—ÓV¸¬Î•ìD ¿M?jÆØW¶PJ?$œo?Y'¾‰‰{Ro–A"¸ÙªÎcÕW¡Þ€²`eÛoa>^×Ûõ”Û˜ÞQK ‰üI¶;ÛIÐ ¡ŠÎfyåîÈ: êêÃöG¿­ò‹G‚&¦š.‚ò¬+mŸi[&BÖE©ƒyøxS†Ã"Í‹cçTW´å°z•ÖX°KBl$Ãî+EŒ¼A~ó=¹j‰¼Mò»p$ëdi ¥BJzEvš2 5i'†43àt½.jMhôÙNâiWãÚÓU©"^ÛÞ¼x•¥¢"RlM_ M¹¼¥Ó¬VtYÍ|JêBGÝæÍç϶gý%5 ªÐÑ« ,ÁŠZñ>ë1*ͳʅ„,¾µ¯­-mÏÑ! ã ?Þ»·]íq/;(VÎnbñHŒaD5‘ ê¶®›êM{dWáp•©åËù¥ºF“WE1áºçÇûÇ#ŠÒÜ¢å1›%‹*euQ¸dÆÝ“CƒùO/Œ9¬;J(2eêè 8i–·Y•œû¦H&ê“PƒˆrÅþº®¤WúLèÒñ VÑ=snÛÙ`½t¶e]ßô<¡¥NH}äP”F³º›ÀkMÄ„ <]?öU¥n £çp#²z9hCeø.û˜zç6/᫆g,§\æáZ‘ŸTKÃRÏa"TJ-;±~êÜ×ûu ΋OÄAÇ´Œ>#È\ -í±ŸËÃV£ÀËÌÊx|~·Ž·IÝÁ¤ß¿ÿ}åëÅ…|“w g¬I³ã¹¹30`e+ÊZûp1¼¸ø8¼°y`ÇÐD‘û$¡ éÝ,¼+‰xeš¼Íâ@ÕÈV‰mïqà'¼ï‚êÖËÖÖz 1ösV{ xÏÞíÄr”@¥dåò‡5`‡(èÉ’Òk¬]NüuwGàÀ:&Ùtj¶¶PYÚÂu!P˽uÇ žn4R!—;Püö4%ßçu’_¥äX‰EÙ‹A0ƒùIn8à¬Be=‘/¬ƒOr¿—› ø¬pßÁ`±Ç­-Øîl,5?*´‘!—¡îèìgÞ,Öf™×Åç­h’ˆU L»2$œš¯ø‡”ï-’·ÈL +G\~A#¹|ÎúÕØ{(f\|® Ìbî±!ü t3üÜH ¥OOœ°rŸ&ÞÉõUL D xÍUy¯²üa/á26VÛËÛTsÖ¹Hép×·Ÿð¹v<+×—÷™ƒ}c‘ÄðÂ|y'ðO’TóÏÈÓ¶ ÇËOÖ‹Püé=oàšŒèŽdDw¬æö¤9¡®Çϱ)Þ¢J7«.Œc×xwO£S¼^L:¶%@ì/—Ùl{á¿… ÈÓÕt@»Ó7:[x–ž:ÈL9>aâþ[à·ñ,ƒ%£’9ØT9¸Áõ­|ÝÚÊ‹­‚®aí| ܳBï&^¹WLÄùB÷¨³¶Î Ä Þï’–MÞÅtófHæ›`3@fsÈ>fmÎ;9»SR8jZšù&™"nY$`ÓîØ&æeoå©»Rã‘nØG,oHœ0@èÞã—U4Òj£‰,û-¬£uLÁ:!ªñ}+ªù6 Óv¸]ɦ£¯+c”è{#;ö÷u`7v–9Í/ÑrJDÁÈÃï4ýü»& Úu{„÷Y+HÓͯž÷'pZt˜N(§Q·ˆ ‰í"ßÚ¢«Ë‚­qš^"EØlF_ÀtNB§ñ;ñŧwRòžíÌ»öC'ײ}?Ú„Êöm(àÝ¥–;æÃG•õ”@_Q¿^ÜG0Oï\ä°ù,L¼§„ï R~e0ø9ÐÁ;[¥&n+& <¹–Ö]ƒÍ½œÕ¶†­ñÂDOáCdW‚~, ~ëK¶ˆÕºÖ–ô©C{$ÿ޾tþדáe–«ë‹œV·Ó£‘uÔ1n¯cÚ(†.c}úï£WN¬Š´#IÒbG5z\õx'iYÿ—\r‚þDòì³sÖ]_ ÌEnLC)¾/2PíÜå*!x4K¼xyŠë2 ÆŠ—ÓÆ´ÛœIêX¡Óf>rhí4sÄôëãL?? ëùÂØ³º•UïÖôñ.*r#plÄ©8.œiK+ÁÁ•plã?º8dåÎ’ßwÀå^”$S±•ä'R~²1‚•ó&í±l/£»îD)€íEìO¬½dJ6V5>^½à0rÔÂhäW:xVšåAÆßj:¨N°e7nk&±î@l[²¨ÍŽä+ÃÄØ‡—£\^Ѹº‚T2ÝZ.Õ­5“ŽI‹Ê¥Âñþ™Ü+ê6roo·Yon·zõjQÔŒ<9B‡ušWÏËš’ðc™pï›Í³‡vÖɇíýäó}ìÐjf÷êH¥4H_ƒä­àv‘Ë1løÿ\òbO³|%Ùj^ É•ó2‚z]O¢psÝvs×*S2bíj]ò‚M·Èm}äùd6‹ÚÔdÙ칯b³[î®b¹Ò{Óíá<Yõç? Ƚzxø"Æ;ñ"6hòV€çí®¶¢Ñت«a¶TrÅ-,‰«6¯m¿ó¤å–“Å/¡!À ¥±Ð}?¼Òä•'¿ø`¬÷@q¿–cÜÍjŸÏØf _m¾ª¦1ˆ.½j\f æç.\Ñó<ÜP7>¾øÇ"²*ÝÀIÖg(ÒØÍ1 )ŸÐW˜Vãd‘î–W1¹F²¶KJò÷Ù0Þ*¿Bý®=Ì©q2†N‰ØTaÌòDî±õ,üyìOž;Q§—ôàßf/tßÛãîK^½Ï ¼p®‘‘.¿•sÓûxÈG4 ~¤Ñw‹÷I.íÒ¨:´ç†nu¡Ã½è¹7Ó¯T>ÂúxçÆHê£ØzqØéú¾”JQjþH þ Æãx”üBŠ¢–~¨¿yGù¨†ØüþÄÎün…Õ ÛMÆfõÀ¶âq„¶¢Ÿ.¦×¶òÓö§ÛZå:-dË/¹“Æ ‘»';YÖסÞÇÕèxͬ¸Êò(¨{—ˆ»f„0‘š«ðJÍÈ_ðò4—ü˜)þ¡Œù SüCïØ¼¯ôD¬p¤F¸ }¾}ä†ù áPŽ^´289=þË{–Bøë îªê”¯®¥ïö~dØÔL®@}WÎì-°···ƒ«¢¸±[-Z—K¹Ù\hï‡;¦t&ªuWÔ… õù®×³´Ì’Yö7¼pd5•wÞsŸ|Àm¢9Ò þc–æá]d¢x¤Q¼Ë«p-Ç ú_›xº²¿ÝO;ú¿`ÜšïŒ%r'j©P§g&á¯@ZQŽñ‚öZô»¢§›¸EF |2¤½¥íÀæüÝëêwæâ˜/÷Àýjç÷#¡´-n-7{«V©:ZPmÏbl È‹-” ®ìµXÖwt}…UXí]!FÅ`ßäk–gP—Îú=ÕšV·”_j¹ÿ?÷Ì£§_T©%ÙÅýR|êEÞo7b®¦Ð_I¿—gÜì¹üôÿPKDhŸê¾)…PKú>CjHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Paths.hxUX ‚IRÈ IRõuQKÃ0…Ÿ;è¸Ì‡)ÃôÝჶ¦µløT’ön‹Ii²Mÿ»éV×{îù‡Ô¬Ø°5‚ÕZR±O”‚Oü?($3æÌV¾ýg,³¢€k gY²ˆó”Ò îÁ]½+±‚ÏY-Zɸ7š ( å?A•nAF#z¶Bƒ`*½•%p¡¤PºYy«•üj—}Å,î°95ª·\vÅÂeäê(Üh²DNÖhÃ}y}ãóÊ“‹pô˜‡ôeš<¹ˆ6h Ã’Z­Äš¼­†½Ø4™Å'¨ûRòqÊžçy”¤'È~Ô=ùÎ:ûç•A;σ#fq"}M2š¾ ýüPK–š÷ÚöPKú>ClHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Rebuild.hxUX ‚IRÈ IRõ}RÑŠS1}n¡ÿ0.…Ü‹5úÜZ¥he_ÔÅ*+,‹¤IÚ†ÍM.ÉÜm‹ôßÍ䦻ć<äœ3““9Ó ù ¶Ð{ùN´5ëÙh8š¦õ!#ÿd¬^#êfvÏo‚—:Æ\!­ˆ¾éug¬‚ß£á ¢@#aÓ9‰Æ;«d£¦+ Æm'ð¾‰Ûr90–¶qºAßöÄ»:·˜ TDÂ|®³¶†þw÷3âE€6]ÞCqEoM²¬ž[´\ ~ðJW5¼˜Ã›ˆà.ø=°e>À˜|1x -¨tc>N¡¸º >MèëŠÃòÐj‰ZA)€u‡ 4öàØG–z:O„mîÒ`èý­Æ¥{¬®®?—7‹ï×WõÓì6)d a|.y]¶»¾' ž¢b¡OšÂ+Ò„Þå°WN?øt¥®(X¯`EüKZ£²'šæFüÅ.òÏ=JšûúÒ½‘ÅTµöÏVÈGŠƒRø¼Ç\i›†F@E‚ÿñ¬k•@Íw‡Æ²^H£lÓ M.~db'iç6]QRPð•ž~<:ÑY2ÿ»|…*íX^(]Ÿ OPK¯,í—PKú>CiHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Repo.hxUX ‚IRÈ IRõ½ksÛ¸ñs2“ÿón.T¬2¹ët¦uÎQ,ùÌ©,i$9~ÉÀ$$!¡H–eûrúïÝ]|èaßµf›\,öýøúÕ‹çì»Èò‡B.WšùŸÞ¼ùËŸ~zóãOìŠß v™•i̵ÌRD%ô‰(ÖR)1©ØJâö- žjwÙ¢‚e ­x±]¦3ÆÓ–‹BÁ†ìVs™ÊtÉ8ÑŠ€5bëRÙBßñBÀ†˜q¥²Hr Éâ,*×"Õ$[ÈD(æë•`ÞÌîð:]"ÌbÁ&S†ën™ÝI½ÊJÍ ¡t!#¤Ó¤()c”Å-'r-u¥,‘ »($\*Ðåí²uËþ¤b^Þ&R­º,–Hþ¶ÔTŒD »ˆèô:+˜I‚T$è@z×RvIoà”£µ5ñ¾[ekÄ%J•V`²EY¤ÀZо8ç/"ÒAò‹,I²;T3ÊÒX¢vê¬ræ0øm¶¤š‰‚4Ó ¹‘ý’×·KjÅA[amì¥1ohW $JC\HpIžÄzWë åjÀfãËù‡ÞtÀ›LÇïÃþ Ï¼Þ Þ½.ûίÆ7sÓÞhþ‰/Yoô‰ý#õ»lðq2Ìfl<%ráõdŽ.†7ýpô {{Gã9†×áÏÇÄÔ’ 3$x=˜^\Ákï]8 矌÷.Ãùi_ާ¬Ç&½é<¼¸ö¦lr3Œg£¤Gáèr œ׃Ñ<Îcƒ÷ðÂfW½áÙ½Þ h2EYÙÅxòiþr5gWãaÀw°÷n80ì@Á‹a/¼î²~ïº÷Ë€v’ÑQ¤ìÃÕÁÈ·?óp|¢óPVU%)n÷Óx·ÿ4Z;e(X%Ø>õº?bÕ–ÒŽÔïS/ÐëÜk °xcÛtñÀpþ…ƒŽÀ0òØG’]]”-/†Fî?€µAÛ©_D þ~çʸ*(¿ÊÜÒ§Á^ƒ)ï!J訰ï‡oD4ˆ’L ð§9Œ áÔÖGæ>4¶5©ÑD$o{šAªÅÈ‘Z­bÍÞþWÁÕýæ"ëÄDÖñ:O4³‚°0¼†È](1IT©¦ÚÓ±ç¦ÿ\üƒSC•ýé×ú¿ÙXW>UZÑÛ¶iq¨ÎÙ¯och4]pÅ0Ƨ@ÁaÒŸŠEbNkUÑ$ô{J¨!ìJPK=$óú53ǸªJÉ‘ˆE| ÚZsæ¶ZÞÎV¹kƒ-žn­1¼6|§"·îS·fßݲOݲ}wËv³æ@«š¶Pb[ ØqŠ˜h²ÚÔÌnzfzAMÕÄËò Öfµ­‚é2ýÝb©-K˜©+f4#c!àË ²ÏMâ¶­}‰íoÎð ÐÜ>VÁb³æôÅ*÷¥‚Ý8¥ðÄÚ¼n´†ð^v,®uwd°°X…n!ú¾6t¡¹Ðàµjç¬dxmy ¿škF#{³Ld6Ñœ\ÓŽpv#xüL|Édê{g^#¡ÊœNŒ¶™Q¸:Íê°§ ØJ (Žuœì¤YuIp²“´Šnpc. 4_a™T©„E§§ó•:´IfÎè¼VͧÉCe;“tOív]CP8ïÿ“ùÆÚÍzý˜%ªP<¿˜Î1LÃ5Á£¥ã‰Ú±_<V½òaëÇ¶ÒæiÇÙbƒ"šwºèƒº¬JGËÒºt°0íU¦¦"[7PAv$Yö• ¨F!Rín.éGàúôѸã9rsôøH¿©¦y@îB¦R¾f¹9P•Pòvf·>)UCI5e¶ ×ÃælÕÏ"œ¬êÙÈ¢œìtXœýÂ5\só©µ >®“ ®uÀå–}X3S­o¨Ûž?0÷Í~§‹¬êm4e¸WäVdÙÁ› ëˆ{Jš±ªHSw’†ÓûFDEx@ŸOÌe=뻟»Ÿ;gv¹ÚCΩ·™}Þ"ájåuÍ߿ ßð;Â__ø†»¥¿ÁšÁ¸†0âå9üÎWø›®ã½3Œ³ô¥vßÀœñËtý åˆÅ‚—‰>3†0—2÷U>ظ®Ñü0y2S“ü¶6´jºu& Óï¯ —*,!ƒ´\‡i,îÛ}“Ö.84ü]¸r„|’¿f(>UãvÑÆ·9X08Yœ5Îfè.v>¡B½I%KåŸÓw[¹LÑŒR‡¦›6x©gàÎŽ ýhÀNÈà7¥ bŽ ,ì]X·¸FðÀ´NdD¼î芾À3ó)&ÈÖȶE¦ï xŠl)L[W1vóÖƒ¶ÅÎÑ‚o[ÕóNQº°ð6v»ÇÙijÅy§Mpê18Ê~We| }ÈMSnÖcÇ„;exccÓ2±¼7{•µøK†Æ5V6¯nI¦­%|ut(èª%z­XˆÖõ¢´—Gåz`õÙý÷Ùx¾ºK“ŒÇˆ÷ÆÁ8Í#Œ"€3^ëR¾ÚvØÅ›fD@ã €í/;CËž?! Ž|¬À41î%ètè ­k_Óä™Òaª4O’ý¯C]V±¨®Ož¸¦ûŸ} ù[çÄ*ü*“íæl+[]¤îÏ$!‘ÜýJ÷[fÁFî¹ãfC¹^7áÛX'@µnc¸^7€zÝrÂvq(š÷ЊXµa7ö}åHŠó¶æ§§Ò Â|¡¥Ûƒ§×\V_§Ñ¢((á«1È|,‡”nƨGú²mêÑ‘Ë-Bs4¿Ñª°·YÛõ(<-óÆ•“ÙsÒ²ÕþÕ"¢VoûoPKð§Ù…š Ó$PKú>CkHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SemVer.hxUX ‚IRÈ IRõTÛŽÓ0}N¥þìTmµM¹!Jµ,H UÝÕvá…‹ä¦nkHíÊvR»|;c;·v+ /ŽgΟ9gGÒïdMA ‘©hC~ÐŒ-’n§ÛÉãk˜ë¥ÝQžoáZÒ‚Ñ=üêv¼‹éõ» Ly¯ßÞÚõæ2ñº{îvÒŒ(sºýH¥…ïòEÆR(ˆ„-ù&düžëä(Îx÷;¢Ó͉‚“Ïò,{Yj{u3Ë·†,mÈ*ç©f‚§ûÀ 8wê&%Có†\¡íÉÓ¦"[c×VÒ„ ‹ ›µ [V Ûµ.W‚¤ðÔ&‹@³½½h1×?^ÆîÅ©5vHª‘ÅïY±QÏŠ‹zVŒod+*1gcàèYÙ¬gjûX<ô¡_ ‰ÖTÏÈ–a¤ÅT쩼$ w–«Mfä×|6YóE-¾²1Û™ä’ÍU³J]…T{ù=ú|z4|ñ¥~޾Àd» ¹[PMîdM.œ„“Þ(q&–ÔÇ^ŠUé¥*½DOÝT7 ë^ÕÙØ4ççNΨCoÂÊœ¹òŠ.൪è2xF6€3„ƒ“'ÿ†<=Q{fæðù¬úÒø¤(|kC}Ù[9c(¦ªëßÊÈãø;8ˆ`*`\Al—#L z#ÅüœKšŠ5g?鲚 Ðd ½Â¯jîÿÚÌóãfþS@Ñr«>É­¡]h†@(Åö0\h 8š[BA¥2Ó£ìÈøÉht{õæ*ÆÓ,_RPbKáÃÍVÂÜÉ•”§ÿžPK•^ØYPKú>CiHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Site.hxUX ‚IRÈ IRõÅY{oâVÿ;ù·^¥˜‰c2#­T‘f*È„-¤ÓÙnUs7ÆöÚ×$é(ß}ç>ü dšÕJ])3Ø÷ž÷9÷<®[oŽÙÖ“Ç4Xo³»Íwçç?{wþö»ö8»Šóhé‰ ŽIÀžnƒ,à 2¶á)_<²uêE‚/¶J9gñŠù/]s‡‰˜yÑ#Kxš!^/ˆ‚hÍ<"åƒ/‹ (eñJÜ{)ü’yYû’lûù–GBÊÀVAÈ3f‹ gÖLcXM‡¨Õ’{! "FÛf—Ýbç‚¥<ià@~˜/I³Û@E%i’ŒèæT!i¶—ÁŠ~¹Ô/Éam¶ ˆú"XÌhÑç°ˆjÅ)Ëx‘ H¥K©4%d\¡Í%Yßoâ-Á¡B%˜k•§s‰¶Œa>É÷wî Z!ê«8 ã{ÒÑ£e@ªemíÅ9ö½E¼ãR-åü(Z‰BIJOë­lãA‡׿ó@ZË«h–’™@<pF§’ï¾Æ®‘ãºÏfã«ù§Î´Ï36™Žôú=fufx·öi0¿ßÎ ¦Ñü3_±Îè3ûq0ê9¬ÿódÚŸÍØxJÔ7“á åÁ¨;¼í FÙ ŽÆs6Ü æ ;KžšÚ ?#z7ýi÷¯ƒá`þYzíj0å«ñ”uؤ3º·ÃΔMn§“ñ¬!z <Œ®¦`Ô¿éæ.cõ ›]w†CâFä:·PcJ‚²îxòy:øx=g×ãa¯Å}È×ù0ì+nЮ;ì nÖëÜt>ö%Ö„¤’©ÄdŸ®û´J\;øëÎãéÓæS¼:Pw:/°? f}‡u¦ƒ–:NÇ`BÖÒXÒꨯ‘åë½ßÎú5‰zýÎg„_…''·ŽÏ¿óÖQ‡™»AR ƒÅÅñq°¥à`´àÞó…Û ²ÄþæÂìDü.v‡[]øÄË…ì1s— ÷Mm!ˆÝ+d‰b­Æ×‚÷J ’{*Dàvç ¯¯ÿ‡ð2Ol2b|œgtÂjŒË%zŸ=f‚oÍêÐÛ.–ðüIŽ‘8ìËñQF©ÇÇ©Žd‚B²yb7Ù—§V+^dqÈ?~–æá/XÙì›:W—? /eöüfò[o0m²&àŽö`ü”#Óö‚¹#N à‹¯Óœöÿ šø¢.ŠDf79ÿ•]^2K*m1¥Ð‘6al’‘°­-#ãEü_‘¥vS,¥=>áßÎKe™`—,ÊÃðB/eÁroeñ(°.Ù¹ªÕšv&80³¶LUȼ ²A: Éq+d6 @”3žqž…Œï‚P*Ål”?p?Þ"ä%vÓ ¢%¯ìFßh’Âgo¥éÑn⥿ÉCàIØÆÁvâ*‘·åÚ*Òt‰4íÖ‚½¤‚3±TÄ0V{¡@´Y*ÁêÞ§ˆ@ãrvʬ–…ÿ‰ž]±M‚EšOŒ‡gŠœØ¤ñ=KN-ªÌó}ž b[òÉ)t@ûà9Iœ9ÆH«lzɰ¦(¯ i®à£´_ÇTdå”A"?@@+2ãš‹ ÞzÀÓ‘CN‘ß(çQú˜´_:iòcC+K¸¦p–Ѻ1ˆv^3ý3HØ™,{10œê`ÛÐæ.áØ¦Â0’å1µÏÅ_ó"0Rwª rü‚—%u7KÂ@Ø ãòK«Ñt“¨YÚ÷ó½9/$¦ .k±¹hµNÈ[Ç*=ã`†Â=ËÅê»=çÎÐ%EkéYíQ}luVbj_™Ø–Ø~güy: EØß¬SH841ÈÚÌ:•òbQÉMÜ?œ2м%¡÷(©ãýyžE\Íù0°Y·­ÔPòU\'Í ànŒvâÁ¶Cm\BÃOÃÝ ¡Lɳݳ‚¸±ËS!Qßz~“é‰Ý2¾ÂØ#‹#FÍ­–éì}ï¼Í©ÃvƆš™r1)y< ß}.\/×ÉÚ#kƒ¦4]Ü!ö®éŠxÆ·;žÚòQùREØ“©/Ô¨Â¸ì ¼,ó,¨ý;GmXÂ7²yZÿ Û²ôƒ¸ë0^x(¼ò¹·&#àÌz³ßž7‰§ôAže¸l]Á˜-w1[ò8¹ µ%ºH•™LâReŒc²Š—z[”*GVì¦ Ÿ`™ÍÛ¯Ÿ¦qªM=çãÞ¸ ÷=¢g¾§^;—l íöX„Ž:eœ0Mdz$Â’ ÈBÔ2Ñ9ZÑÖnÀ;G3®ÆGag…¸ÍÖµàL9T=¹Ûp”dò¥ÍÜ\56bö3ßK8‘ T÷¤ãPº‹ˆÐAQ¼… .¥±Éxî@o¢8'PDKä( ¢­C´YK§I¹5¹%ŸNe$ËD¡º[/rêbvÅ«ýEe±¶úy*:DÙ¨Œ]É5* ­Ûè.BÊ*ÄiX§„~j5¬j4Úi0£_ÒF£àˆÙÄ•NEwZÔNÝ$Æ ‹G­ò™Èm™HJ ½Ôß@C#&QE%|jîYu-}Ѥ·‡MšÃ¤·À{­=óרS ò'Æ$cɼÍr©|®U„z|ÇÃ8©I¦í ÉEûIÙ•.Û"”dšé² àgVƒÁ_4ÚÜÆ.U“‘ê™ ›F<¾˜µ4 íßRŃN&qÚL£j]Z ë‡÷½Áh‘áRJ³7¿¼ö(¡á´ŸÁΛºÞín°]MtüÛ€S…É´Áe²,võåp_5vyAIè”9%]Û¯ÞÔ0¿z½[aÿ -D·8r_—Ä1£ß3ÉøŸHö\úIW^2Òí‚9ñÅ £Y©RŒ#þ\³šº¼¦.ÿšºú²é¯Sö/Ò•Â!?¶|û^ˆ2Ä£ßng.¢ù»2‹å)“ß­SõºaAÌÁºFm©ôYvPi zpÊ$o¤Ku¢PûÞáH•W/Š81®xíÞSÀ‡cÓÖ0tÄʳN•é, Ù+à ºÔü’g~$²Ã’è ×CJV¯äºæ·=§Fä×JëEë“Ð̵+}C±åõÇóë‘2>M“[½1{àÛ=”,iSGà âDÅ/ ÍÔÕW¶£»Ñ]åî³ù&¥»Nu‰¬} u,_$pjý°»D}¤JTX‰7N+WJÁà[OØ´à®Òx«3>Úg¬4ÁãÄsØ g' vò™\·OnÚ'3vòÇ«Ì˜ä ¢ %¹W`x¹ØÈH2ªÈËœW[¤Ñ/•{Ôõ-î¬ù¬yÈ2]¯÷+Ý}@¥™R·²åçBõÕÍ3:tI´¸0–_`Ug,/ƒmFM”™O›•ûVVå&&Ð"ã)º~ȽÈ|ì¤ÖI!|S¶0££9’Ÿl¹írÝ|<ÿPKÛ±'h‚ Ç#PKú>ClHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SiteApi.hxUX ‚IRÈ IRõ}TQoâ8~>~ŨO°Êµ½J÷Ò=ÀëB%¡½>šÄï†8²MÙjµÿýf ´PèIHÁãù¾o¾Û7_zðFº{5jU;èw··þ~wûÇLÅ ½i+á”n1“’SiÖÊZ €²PK#¯°2¢u² `i¤½„²f%pDû 4zá„jU»AT%êR²«‘Éê¥Û #1¿a­.•@J¨t¹YËÖù`©i¡ïj Wùq5ˆ ¥*)P-Ðöa¶ÊÕzãÀHëŒ*‰&À¤²ÙTTÉa»QkåF=ƒo‰%ÞE+Tmk]©%}¥÷×m²u•"öÅÆaÐR°”-¢ˆ ÝhV6 ‘(4àM¿×xÓ(ÔQsݾ]^z[ë5åÑ›%l×rcZ–VilŸ×ý&KGb_ê¦Ñ[òXê¶RdÍÞï§Xà¾Xèémí†ßj‡UïJ¡‰tï“ÞoÙZ ‡…Ü·Å•ï–8rf¨ ëð<(F§×ýèøúPÇ”AžLЧ0cÀsH³ä‘Ù®Â×W<ñbšÌ ÀŒ,Œ‹gH&ÆÏðǰӌå9$±ñYq†a¢ù˜Ç0Dhœñ/·H¼æž³œøf,MqyÄ‹g?µ /bbž$„†YÁGó(Ì gi’3,bŒÌ1' ±‹‹kưG\@> £ˆÔˆ.œ£Œ …Q’>güaZÀ4‰Æ ƒC†õ…ÈíÔÐÝ( ù,€q8 ˜G%HäMRæ®Lxš2Š’jˆ¿QÁ“˜üŒ’¸Èp Ý¬xC?ñœf<Ç‚½Ç,Aê.‚σИ툨ó§ÂZÏsvRј…2æ„?Χ!ßô:Q~+‰§R7öºÆG¥Q‹¯½žZÓá8 _…´‡¯‰Y –/²Ñ;óíHžœžÒCkHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SiteDb.hxUX ‚IRÈ IRõ­WmoÛÈþ,ÿŠ©‘ƒ©TG§úEvŒÈe³•E¤ãEq È•µŠäqÉ(jÎÿ½Ïì’2å‹àPÀ€ÅÙ™gÞggOßÑ[çÅ®”늬qÿý»wÿùý»¿½§ëè« i^gITÉ<'3/D¹‘J@RÑZ”b¹£‡2Ê*‘ hU AùŠâuT>ˆU9EÙŽ Q*äË*’™Ì(b¨z™¹ZIå«j•ü EJ屌IIבUÚZÉT(²ªµ ã ‘8î ª¥$3âãö”¶²ZçuE¥PU)c†€)Në„-iS¹‘Uë¨FÐ!QŒ[+¸ÂÖh“'rÅÿ…ö¯¨—©Të%’Ñ—u¢bb,2H1:ÍKR"MDÂíô“í4ܪ —V½]çæe ½Kת.3(Z,É>­÷WWLaôUž¦ù–}Œó,‘ìš6Y q-ó/B»e’Ÿå¬6¦pFЧL7GjÁ‡¥hÂåRG+êxV²ªB=H$£ÈK­÷¹ÇvkǵC7 ïF¾Cn@ ßûäNœ |èÎ ¯½ÛÀáæá=ySÍïéŸî|2 ç_ ß ò|Fso3×Ùg·w~E—{!ÍÜ7nèi šëŒwãøãk|Ž.Ý™Þë¬MÝpÎÈSϧ-F~èŽog#Ÿ·þ 1òÜO}(rnœyhC1hä|Â×£ÙŒµ1Üènøl(½Å½ï^]‡tíÍ&ˆ—ì]Σ Þg#÷f@“ÑÍèÊÑR€´“Ìi̤»k‡©¬u„¿qèzsögìÍCŸ¸ë‡{é;7p4òÝk}J8ºò4DçŽâÈ&,ü}8MœÑ ˆËwù9ɧGEŽª2O•½ÆPIåòìèHn¸8Hí”,í·gÏá®jO<¶QµV,R+.o–¹=Ålè’ø;Ø©Jl -N1SèV‰’Ä×Jd‰"ÏtË·££žn㘾D%É„†¸ÉÙ5‹6‚éèñìáðhU§é+ÇbÉô…³‚mz::zlí\”¹¶íÿlj"T\ÊBOÒïslÅRÉê%ùfª½„žo³4vÉÍ*ú@ïÀðqXŠTÏU ç¢ìSGDSÀÎy9äý‚ˆÿÜ ÕÏôóOæû’G=ÅÃ;nÙWu¦'=¾æÎ±h›—ÉÐXN} Ì0³Ï¿!ŒÚÞŽ\ë=^ ܽë-;“‰­–°úÐ×c,O~zÿ~:aÚ ÃÏ*šÔáÚD ¿´•ˆÊxm½a|;•Ÿ…Å2}úýwzÓIIç¨ß\zí¢Vk‹Œ‘ ´-“ÖÖ–¢sþHÚ2Hán`£ñ…Šz)2Ú—»9­¾öôô4ô&Þk¯È‘ä`áMP¡U¼æ EÕ…nÄg>UeÛëÆ~"ÊËÝPÛeWù,ߊr)?´«¨3­„)leÎ c§™Iûú÷|ÌGº¼§™wçøƒ÷O°eD©}ãÞ¾gÂèáOõK¹NAwj°‰îA ¶é¶6¾V|U^À*eQÖ´D§ê ¶©E^-ê¬2MÙ5ÁŠ#UÑM±8ûj—â·{ŒuÜÄ (ÌìÛyh½ícm2P&ˆ+ß»]pÙË}4 ÓÄ Ææ^¤cú+e} «:E6ž‡¶i´ïŸbçxýš—&bÏdöýS¦íÁÇa†ñ-Sq¨T|‘èaØèdõæ<øe/ ùâ ¡ÎëÍ~ÚûBƒ«Ï² g×z<@FT¸¯¥}!àô—Ì´Z“Ù*‡~p[}t‹Ðaß[Ñ)¢–shLî%CµxbèÈ ô/•þ¥cc~§º¿á ¾L¾fyÔ½èô”Ôo)_ IŽ%ë ­#,§{"°À U¸´pâ|ÃË»ú±+ãùawóoÓ``^ù¨<î‘N×}ûãüyi€ýÌž Ìs㬙^¯ÌÑå®)b‹Š§Š~Ué›¶>| Bóç<©ÅßÇ¡L,¼AÊAÛLM_NPo©Žÿ:³wЄ,|ÐLøî½ûƒíú4TÅdÉ›øèÔ-Á<γLèAE{»è—5)¿<²•|¨K“ß%/n€8 K¼±”ÚéË'Úé×C*0_I<îùª¹Í`ÁâB—+²&—¿`¯ºW¶øŠé‹××g½›ÊÚŽ¡¯—ö?ðò²‹¨ÄÕõ$†þ…71àûú6ë \A$Ða#‹LÝ™cX`h¯3¼aP²<ëÐØ\<’ä…Ù)šu£)5•e´;o¸Ï';L_\çß ÏɳfÝÓMvh¸¾›Q~@Û—QKñ?û…fÓYeT¿ é_Bž¯ãR XÛ¨nÌÚÒëÅúŽÎؿǗ÷4ä6«‹}öì8ÍU—} [žƒqÕ>!¦›ÇÄS)R»ìdù––XP±c1ŠSপ~Ùó*È¥ïX÷ãÑÿPK™5 Y:PKú>CmHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Template.hxUX ‚IRÈ IRõ¥TMkÜ0=;ÿ0 …H:ôjwsI)ôÐ44!—REïšh-#É›]šýïÕ—åµréÅËÎ×›yóFãÏl…`¤:_³Šæ©<=9=i6Tœ)¯tþ£3lËì÷F5íê;ë|LkxÀM'˜AÀÁ¶Ò!8YÿœždÚ0ÓpØ2uƒ¢ºa|°€_ •$´Cë¾å®…ï¼fßaqã?Ù·lÓðkê‹g®¬5¸‚6(_¡ñq·ÖæÓ|ᬩœð9îm4q™4VÊŽÜ÷]¯Z* ÞM›0¾µ¶×–ãWçЈ†~aq Fõø; ÜG¡éU{4¿«Ð]‹ICµ÷U‰,⬗!±lÑ",(1Ú~ýÒ¾½ºÎdMä0dÆ™FxðN‹`ÌÒv´%2ÑÎÃYà/øêü? ¯¯0µ_ØÉ–¼íÂRó³{i÷ñkܸáï”ìP™=‘q:š°PhºÍ²[Ùâà9„ß kÖ Sõ6T^3ÉKea]ϼÐë0ߊmyVømÒÇí qâ}/[ZÀ¶<²:ÜÚ^ˆ=ËìGnQ©¦BèT³u•úÙ°g¼cfM°x”M¯!©EÐA9Û/Ù)èÞ²žÉ.¸¼º2ÒŠ»FÂÅwÕY-˘҆ gDœuá{u»ïòÎpžŸƒ'dPz Q䌧=*Ìí®d´eéæ:5k%_BTÞÕ©FÛäé±rìÔÒÌÆNkCêç’Þ ÄŠ| ¡q”DÖÀ=±+…èL²@BíÂi Oi”OÚ_Ú›B-ÅÉô¢'ëš+‰ËÖØçu¦§©œb;QU£¨Ò äŸ1nvî³O¦oªÖF¼¯Û)Ð iîø`¸µž/—¼W [³\΄‡+Sb´¿ÙÝtq+!Ÿ¬ªÿóÎõðPK¥!Ð0ÁPKv¹B,Haxe Toolkit Installer Template/haxelogo.pngUX ™IR/7 QõÝ»‡SSÛ6¯W±aCE@@ºtD•zïé¡#] DEA@@¡J ½÷^TšH B¤B/ $ï9¹¿™ï?øÞ™73 Ã9묶Ÿõ¬µwaZJ´/@ Z¨²¼òÏr vî,p+›Ìü:ï®lì ÜŸN=¿—â\¤ñ‚ª+ÐLŸa8-ų?ù&r•¦ç‡ÅOø™ pG}—ìÎú>g÷‹¹wþzgQ6g킼Ãð“I"tÜ8gÊžY"f¯ë[µÇ#hj°nTÚ¯ˆrRç2Žoјªwqî5¶­šv \Ñu™ãô¶2 ãB±+\çô»v9;Ñðy‡´Áú//ŠýÃ$±—´—ð/`®uéÒVZ0îs äÿùOÆKDLJ6[öÅDÛÇm´ñwñÓ† ¥²•é‚ûUôb›vägä¥Çébý§…çÑæ©y¦3ˆcÕwRHä-ñöF¡õu¢[²²…ÛJ¹’ úY/7³h›±NîWÖ …aC›$ÒººuÞ/&Fx[[@ðóÝÄ>7·Mú :™$24°™+*º¶D·B+㌜!Ã)eX9õ*ÓÓ»“ÉsÚ8\ëÿ~¥)â¹èȧ…9é´HkU. “©×W¤9V,~ð·ÍØRžÒåðànV)¾ì²H ß>è=iuë£Oûz¹#Ïär(æ(ê¯OÏÔ‹Ã 2ïWË)ˆ:«d{£ÆW²§_ëRžPÀW¯J\åVÌYYÆ6¥Åƒ_)*8›üª“CŠžÊ„-ÒÐŽ5ÁË6Xº¥™tµ÷Ö‹~ú««|ÂSoJóˆu×È‹YÕçíªøÕÚ?óîÇKäk©6«eà l0ÙÞ´âñög]<_ñ(3¯·,3ûXÑë´´;o£¸9&Oz2)qrtg gÈŽµøNy ÛTâj)ø¹A¬Èþ4™~é¯GÏÖ¸ ‹ð´ä±H±¯J\§æÒé‰8 Ë[ó®.|y¸ böðÞZçÀA¨†v½‚Žt äÆ.áÁ/Šoê°¿òF[&ÑHð%ÊÞíÆ”0qi›„¯Ê>³ný0Z+;¹ê²YO+ÃÕ8,ÚspÔBxe•‘å& Fò¹o¡ylC´j£ªŽ“ ΘYSñA™@·ö^ïïÐþÖšL bÎáN|*ÙÔ…Ìi¿8§¯QÛ’ò™:LáZpôûXŒ,'/‹¶|"YØãÉöúÆÜ7…•„¹ƒ'+ü2öVµ¾ÿ.ŸódªK@µûŒìRXl"Á ÷ï øsü#”t¤4Ï‘^éµ-g;¿—“ɦ±µk±‹xàØ±äy”>q‘œ˜mêäÚ©4f#P%q§7os$+(ñì xFÛfáNùcU¤ÊË\Pñ`ýL/)g¼Ë~¾š½M!·–±!Ï~¼M6‚ÕM¯N:'5z'kçýñCJ±žîÚ/ka%Ù†å|b²Iªåíh‰m¢OXŽ(bÖ¬§ˆRlÇ™Ç$ðëÒ_ùÓ7t8ý£Ëze&¸ÂØ`/çaBZØoiÓÓÀ7D«4Ö”GM{³3¤Ê ´MöŽëÒ{/{U ›p¥J¡ä„Ðl¿OA:FÖÚÍ[›æ ˆú…¼ÕíS©H1™ UG‹Ù€âAÄACÕÚ¯ššJ·ç—aa>Ü<•r=Cã36ªVÓ­Ëï\±zDœr7“EÎ$Í_†<1Ò½3䞤1ÜP³%ˆj† Ž8Í@ËØK:Œ%`¦”´wW~  }zWSîRX[(HA­Ì‹*ð<ô‰îcÑ Ø&7#¿» "šØ0ÛG¿ec½Ú²â‰J¼ã½[=¿_ˆúìçeáQô3û…Ùýý›Fç}!;…ÇyäñÅWÍ_ýÛmr c *qP˜YfË”“d€)AØ?͹·—Ÿmkd;“þ½ùàîÜü$SK"–ÏÁ©JZ½=±1e¡â:Pw}Ù\“¥ß#.Ä;}SJoüo~«-3°üÅmlˆFÎ8­á0š¿Rôò{_P‚¦sP¡\‚’û¹Ò…2óOßvÅýÚ·{Õ\ü’"Ö’4^¯Š"àߤ;¾âÐm|j•TnØð##g>ç#Òdã`íÅÊÅ}Môh§Ìnx%ß_B|h´ŠA Ç—Rít5ÂÇèE¹ÀGu=½cëAK¼¿ª¶î7N¾¢‚§ª¢Fw>¨ðý3³{ hxßdIiqܶ®¶êvx%:C¯²å¬ÿ{ ¥ÓäfœîÚîäýñ”þ&ÍBõMXÛçÇÀº3«Åú£b§8§»„|,rìü›Áö›0Âb1pÕ.æÚ’‘“;lO¦ó)Ê…Of+-NÕlrq˜r‘â²ôT®ÒåL@oÿö²v£KLÔ̵}Cbè1¹fE­C7K ÒÒAòÝ쥈ªÚròד2¸u'îœùpì§¾Ïgz^%ÔÅ£Ää þ_:ÀßP|ºãŠ2‘ÞdùÙ QÓ³¾,z’OârîOCèÉÖxî‚•Íy§<]¶´ *Ö Ë—óÓ#Öò݉ø~|²ý;•üûG1ò ÕqH¬2­¼tJtƒn…~~^ðe`öždºš§¢¢i¼œVyÕ)·[­þ4D$%M'ôrõýÐΗãwÙÊrÚâ3ó“jõ*¡ÃÉw럾se2EgGŠ4qã¯õ,‘ϧº’æc•¾ *‰&N/~5*‚õ»³ÖåèTê… îÚ™òqÜIÃóòWøäÖØ(\`ÞWc$|:Lî=¥XÇeNÙ¨qNPˆ†ú÷®Ó¿ÓÌE^gu ›Ç”LÉûŸfò ó¡ŸÐ;ZPæ^°¯Wþ)½#­Ï ápûÅéßOFLrŸÞ§5v%ÂãœQæûðÀ1 â/2þà¿¢âŸÝ÷1Auý©Gã‚û£d‚²†]¿Õ«ÚÑ'ö÷ƒÿ&šoˆ•€°ÍpóP/Xçñ¸dÕð­ol %sÔpOPo—Rnt.P[ÍÐ変’3ìØKŽjÞ>•N¨WÊÓîê®ì\Á¬N¨ÎõÉõ Ü›ù°û !ì\?Êì¸Æß¶£€é‰Æô:”Z;Pÿ¯ü]Ž#QãŽÚÀz­—A÷?d Òd1Ð4w×;1ÿ~¡­<¥¼,sw‡\Xá¾ã“ª0Ëb¯ýúã¡ÃQÒ¾Ùeç6™«·[3í†mŒj>*„aRÚŠ1(×»@о|ÌÚ˱¶ž…y =b$Ð_§ÓÓ_Z)üÀ‚pyÚB+á9ùŠ æ›z©}²MãòÂTlì¤àý2óÌ4œæ 0^'y'”½8÷ðgI¿j’©þÏYß·ÇW/lS&Ói) —Ñ­œÐFq ,=|æV:Û7tóC'2Ýe=pž™5Û5-ŽÛWžröËô·LB´HC0¸ËVxIJKȇƒÆ_ÙgdªA(Ì´I#ªLPt—²Ne¥ú•ѳÅòÏ^‚ëuV_¹Ù5xwH£y"¨FÝ“Ln&ùºÈ{0f+ÓQ>àÂÑeAuñÖ½gÃlÑ`xà‚“ïŽ†{u*h`V²¸©:⾘Q5¡†'ÿOXíýs`o|ojÊ'òîìGŸ¹–\Î3S‚a9Tåö©hZµÌg@73‡å9ðbĉ Ëv$>*—ë‘ýÔ¡PUÓ¬–ù¶˜\2Úož÷ᢆÿ)¯ÏBÙ_ eÁw¡!Þq¼`ºô”T=bÙÓm®þwýœõø× ï…\¬æÆØžÛÉw±a 3‹t*թϨ” $ä&>•'un Í÷÷¨ÚŽú@ˆR#(¬øYÍ+¦]ÎJ˜f“kŽÔºª:HÕg¾ÍØ÷“ †gþ&ÈüæÁD,²Ö‰…î“o7’C9SǶLŸÖ$¹ŸwÒ B!ƒï€t ÷ ‰«½³5êªã_À¨eÒ(b÷˜ª§\OtÜt¦óv² Çqƒ†Kÿ-'°l_rlnÎÛ×Ù%ªßÁwx«Á²k64_rD… ŤƮA)Ynù‚3ì=Ip:%Òû­4î™%a†JGÇ$v@ËSÌ…F%—1uÃN©è»X%’ÓVkšŸÅ¡û ˈYôON híip¥ë^ïÞ÷,7{ó•G8_Î.¿3“Z}X¿‚ÙßýbV«¸ë>þN†kd¦@®`ª˜¢ïWXŒÍE\ÉîDQkПFC+úS?—LË gÎÚ¨mÇóy‰Ü`>^LÜ»W“¸á½áº<ýÁü_Èë¯Õ5Ùî~›)f,Gú ÈòR‹'¬¢ä"rÁÅÂt/!Ëâàºñuvù¦A†XÐô« ÝZÓÒ30».ô$¨ ³Î L¨7E»P ãMÚ¿±.•]O¢Å@Óh‘ì‘‹Èa"¦D“ ­„2·W e4þSÓT’¢©ÍjLúPjôç¡… ¾‰ìÈ&Ú€ó@Ç^Þ¿L«Òˆü:a¡{Ç*• VWº¾•Kà³µ)urØLžo¸•¬º,Íæ`Éš?z³Ìþ5cþGu:›ÅÓ°A‡Söq÷OÊ­=)¬û7¾=8 yÍüEO;»é–×B.ßÌ —€}¹J¨Ú~Ëu±1mª¥Öúš'x†ŸÛÄTkCÆApƒû¬yÀç®v85qlw K¢døÐ¥ñÓûòi”ÊŽÐÁØÂ­,æ’€fo »!áI™Áý÷W$¦…¾Uù6þ§Ù”Ä…š1ìã–àMFn><èl¢wfSýAvYÒ¥±pmœ¶?xj Ÿ ™n»ÔVÇÂi¶‚’ÜYõ'ž”é|˜ƒ+én0>7µd<1;ºŸä¿¦b-/õá€á_VÃr—™±­ÝÖX*-‡’1ÙöKÞ©û?j@!Õ·x”XúÁÛuÂÏè‡x¡¯Uÿ@^7Üíõ®ãLïvî&ßaBmƒÝ3z Ë$ø¤K·T#ÄëÉùU\ÂîØ«“JsÓ'ÊÕÁ~mò4žmå­'‘'ÈáѦδw2µƒb<7"Ót¤†.Ïd-)hÓpáD–œ ëC‘þÈ—f£& e¢„gk`.û;ÏŸ«„%ôá‡~ûó“é^ˆù?Uêm7n>%¹û°ä·R\âúaäùu e{ß}&K~CV››$ç@DÎÜ×5nñl}îV0#û! ^Vã'!eV7Àj8Dç’>oËj±L3¹IåÆèhz(.iÄvj>2y`þÁ§ïÁœM¿l‹¥«Zµ´áÎKY˜cÿ“ïgA ä?oY“CñyÖÿ–ôî ~êÜûõY&±OYNŒÞÿXQ¶ñ[8<3Vp„~Ékrfî>¦¿±>cÅ 1°ÕÂ;‡râ¢`¡ïu`ÙÆ£_Ôñÿ˜–—J–ži)¶¾€}´¶Ó¹{-Àä<ØJ2ÑŠ6ÄÃbz5’mà;¸Òƒî€{pÊ4}JÍÚMkgèU«Ï‰T¸/~£¶±9€D7)ßÖ®AþŽÂ>›ø=ÃP"ºŸvOõû,&ÎXÝÅUomÜ è©…í7p’Tº'öñVÖà¶@À¼ÙwÕmÛ ãfuJú΃òÚÚ kUÍ-í5³ö4ò¹çµBï2 J÷ ¡©´Ò+;/Nþ–;¯Á6`ÈVcßµï%;Ò£Lü2W´—•ÀLÔ…"ppu@¡]øß¢¦ˆ{Õòiñ)†$*Ù{í•6qv&Ï n Eq‡dTº5ìŽÈ#ÇF[Û¬Oƒ&‹Íê|áyfH¿·Å؛«xxˆßtŠ£Ž_h«D§|—Pa ¶&ƒ´µy”†Åœ³‰>ìç•$6l…ÕÖ‡äýöº´u2qæ´ó 0Ê›öÓŒñNÝ\m¦wÔÖFï BOýžÙ\oÞsñß]àl“ÏœJDe§7ˬÎ}ð)vnæQe%<;£Z÷¶ðmBŽ!=úBd°S±!þáúæ€ñ˜=7usJ‚CðUs¨ö” /b(Á×›·©P ‘†?£J~>œÞ²A¿ÕXc‚S­ÆpÏM‡ZP¸«–­÷§ ]jé ÚÄ;‰j±ôòêš\šÕ˜Ìù–ìHzÄBÒÏ2 ™(IUÕ¥}öÆnÃÅÖxuWlÑÑ}‚¼Ô­›}é)5^,Áuí'IåÜWÙ¾j° -ò€õå•ERŸT˜Ï¨J³éÍyéK¤÷„Y÷“<}ä0å@-4¼ßþ],'×–a;®¡~ïð»2?4CÑÈÖoˆ>rúh´†4×JÙÀ{€ßJÕ˜Ù9i¸ÎM$^qo²ÖíŽL—hp•'\­TÞWU%7Ø.Ø$6(‹9òAƱ‰s!—rànŸsÌ ö-¤vµŠ,jíIi«}$Bñ`æÆjmm`’ùJ óàW8tÕâ@¿4Š” ’;=1Ò9?_)‘fÃáJ%]‰ÕN¹”æ”+ÇJÜPPcÛ³ÑÌg 䧨âN`¶˜ß óAsd1?d ÀjÛ=ö :›ËíµroxÁ"­ÓºS^ö-Sóä½êOòR«l3ùÂd9¥r•‰ÔÚ» bjU6D­‚}Z:nÊG‡‡¿ó;x[‰â‹¿ÐÖ= Þfä Áî}Ì–5 h†¢èðùk~¾è«).Ьd¶-4Œz¢ŸÑÄå]„©L€+Iw7EO %ýpíáIº.äü{­º}Uÿ'&†þèÿnÃ;þ¦¯’‰_Dt©]^K:ãg% zÉïŠB„ÔÜ8OâeꃊƒŽ‘¼ ”¯Ã2òÕ¡ù–,:–ã^`.·jpçiâüàõV…j Ëü´Ü.~£lÂKG½uÙ:Éèe>jØLS%rí0ƒ , îûYÈÅØÊãÕð`¥ Ä7,~ÐÐù Ïü~ŒT)’é¿g×tø |_q™Øæî”r*4cX²¤>è J UZD[p÷{m¨¹1498Z‰÷´G³ÍhÉŽY zÐPõAÇì ¬ÊÄ)!?9¾­(ÿp¨ŽL±GI‘ðË‹ë¿àå£ï-gGW;72uH­rc¹x1x»¯Ìc4ˆŠ!öü ‹Ø]ÙWlž/r{¯ò#à œº&¼S\;§+^JÑ»øÇs¶¶þf¨oO×lqƒJ͘EÌÉzkòNx¶×æ¦C.H¤ƒ·»¼²#QáAÅÞã˜Ø)Gi,ôÎÏ.t ÏÑ6yÀ¯ Zl•ƒ?_ãDÌ©ÝÈññ·rñl`ÙŠJŽòÞrHU#qò†¯["›tÔb@Ñ .-PÎ÷GaGfh¿îJ…€É³‹tø¥ý¡[R|P¡iÑøúXNBnó-ÛsìxZ܆¯¥\®Œâá²6+GŠMœ¯Æ¥~žÔ­ñu]·É‰uï¦\©rLZœ *ûÍ7yÇöç®~J‚€lNe«ùvºªà!¬KíHÂÿ<3·'ôÊr‚á®sÌ5·ð¨¿¹ÅJµk5ôÅ>›RÄRÛFªÖkòyc¼#rKHÁÇ£Ë\ÿIàż·û™÷Ñ‘ñxý„~”ávèeÁ°Gw”Rør„*$Ë<ðÝÉÏoRÄ™¾l*éH…+Ö@‡i„±6þ oELj €$°„Æ**’^ä„¿þ}­m§AÛW¯A—lwzºÇÈl€vtñ›9jÚà°¤µî¾7ˆPì%ÌÛ¾•ýˆ¶õÓ.)ñsK×ùï%_xBi<ÑÝÿÔæm¿BõÑàvC¥(‚ì;·_I™É!6tH<lkLqÝæ;h­(ý+ô)»0Œ”±‡pƾ4£UV„ø zû”ø¿ñRØ<ŽýŸ–¥”i ÿî\þÉë ¯5×”èLxºsZvëJ`Q¤¹{+¥œêÍÖ“¬d÷*T¦¤8Mƒ©TÎéÿT§{­ʃ¸×ä=ù\pHB ~UÙŽ{àÓÝ…w¾ F‡¦Í~;#°’n±2Ÿ$½½p"­ÖlÍ•eŽŠÛfR“ô#d‡jVÙRÐ'3îë'¥ê——tù=Ú>øf!0'fY¤7ªAÓ^¤ïnû'L?€ßö㪴®sZå6ܼbáT‡ÔP+ûö¸¨õ'Åýò6sÞZ†¾l+;xÿØÝüˆžêÔ^ ŸQšK…[¸>Æ ˆ¶“ýz æÎ‚Ô!=¤ÄU’º2eYîÍý6Ê›“„=¹ž÷>ÐYM£‰k¨ˆ-«ªüI¦X¡:j£aýýåZ˜ùƒƒPöÁ“2In¹Ò ‚J ˜Kü¨G’ŽÌ ILŽ|›Ô`ª§m uSÒí„å¦xAeP¬ºBoro…Õb_Tn’œÜLC¹$€QGÙw¼ˆÝŽ™:í¬z˜Áe¨˜;ÐïÓàþ(½l²ûió%Ȩ`.;±èÐ"Úk»!ÐŒ!ô;«S…ïâÐÕÞñ6I—ÊÝ W69fÖ¤±ÞÁÛ§=2&8å².;†žDbWA.s̯F7lÁ‰¼u•°Ç„w]síÄê?¸ ‚#¼V*œoÙJ±Ò ßp›62ŒŽó¤b·xõamÞcîl zÚ©Ûkã(Ô¦)]°miÝ`áØÒ¨>ÕËS´´{»ƒ©ÅzíìB•ecF¹¦ŒØjÚG»Ü½N¨©ùe”žÖÎÕ4«YÙIY4‚V2`2G±æÑàýΈ¯”ölÌ> èÚøUŸ*žà”‹<>iÍ.Zô[¹ÆÚ7†ð» (Ô·]ðl¶‘ô;3§–ä-½ÁH”Ì“¥Þèß^´ë‡nf:¼¾Õ+œ—]Brï{ïÿ`I=1¾ã¯¬Ók&ÌUrAÀZ™ÆûÒø£´ÇO*COð*`ã|ázJ°L…ȳS¯rît‰)“ëe …°È‰/IˇOöL»†°O|YŸýóãûîrsé)W4&-ä3 ˜ñß;™öA¤ÏÒ~ÄŸ‘©ý²à±GßXþ Li!â[™ÙŽ"¦Ç(Lýåë›glqÐÜYóKßµ‡¹c¢øDŠ\[C+ËÃ=]ìpm¬êe“ý!3bDÄ‹\IÄSƒ'ež¿CMÅ%ºý@ì¾Á§]DÝFp@ kà»5­ 8AöðC(G.«£‚f ïô7{ä>H^¨¡}ýs©F;yçñô@cÕfT«Hcjòݓإ[?á’zbÆÕFú#g—zØK+5¼¤ÅÁ^ XžO?ü»Ÿ—ÚW†—0U.ö •E«4:²Ò–-*¥È(‡LÚëÕÊõ³àQÙÅ8ΣŽ~´¸ó7€ß¥e$;Ê#D~™Wh¦JmÃÝýÌ AuV¼ý?Í 1x³Á;ÿÃ%U5ß°=×Â-¼ÖüÊÚmvÐKÌtÌì>J0£bÖz7w‹Pä„3Èú…«ºœ3aû¯Šˆ·`'ä´ )qWê@n¾‡­ ñ·•+Çã_ã?9À´§UA‚³ƒ/6ûƒ©ýÃX§‹©|*@ÒûÜg¡`¸öƇEjuÑÇv¸2brF‘«*Iä½,×ìDlAG¥Z,‰»yã ï]l®¦ÐÔIä8«Ùb¸°ó·¼GvMß]ÐÞKlVŠY²IG7•©ïÜ1œ'ò&‘:gÔnçûĨ‚;¢ ‚Ã¥xÃý?+R>Ô0­êÕžiªDÓ8 [ö¹hI”&ÑÃDà¶“¶u=_Kó.ïR·~Öõ†Y¬†ä5lº ¿Ð»çÕš“YTºÆŠ:Ä¡*柼‡ÓCî&0¤¥š[‡ï‹Ä{t®Ô¯á鑽Á>ï+à}Ý£E¼S?ìŒfSÿÄIçeHH˜ÖWé…¼~¬µtQÍò=Ìíõ„A­m.ãuÏ¡ÊFbÀ½§öÙ—ôËMÒÅ£Ç 8éFÃaÙTÿ9,åkëË•õ‹5Ÿüå ù•ÍQÙÏÐ{*·ÃØY«ð,£=&°ø,MqÜ–=ð†G¿üÊ•êò^ÊóéêÖ—qEx¸|ªöéú{¹q7Íz¬[ô­àŸ_fâE\¦Ä-C‹3“\ozólCÁÕHÿàÑ¢ŽëøË±â‰7Š ¦ØíÚu"¶WU¹S6Ï\La î¦>šÒa˜˜ý!1áöBG•G ûæplys7E¥NÙ1µ}LÑœ\U°M·ÚÏ9<ûÐE÷h¼ûÒAhí÷Iß¿¥ÛGù©8øMSß°ý¤Øqá µ^K#¾Ó§º!'Zµ×gaýI]â·4¦T{z¼Öc}RÍ&T“×’Ì®'‘Ùå|…\™ÐÂIu€¦š2±ïoB)¹kˆ‡ó¤Vˆôø‘OŽhí(‡‚tOfKéÇø|l­y`ˆÆ^­:–¦Ù Ñ¿›H}+ ¨CÎ¥DͲ"'h¦€1TW:í—´Nð]«-Ûï©­Ž/¥ ͤ‚´‡ÞpOÚ¯M7Ìwž áŸ³Ž¼šE5Gãz)½ær·¦XX«ñþâî4iªø`ÎgïR(6qS\ ’±rú‡ª­Z,Ú­$"Î( Ú¯[<ûWÞßðƒB¦„J£Çµº}”Âþ×*ÖŒêápMØÎÚ†¿š'…ÿkìýúTjîÌÚ¹XŸ*3ŸäWòÅN|2¢¼È07OIe$YèwDÁÿ@qš·ßö“Áùö¡K‘‡âíŒôVZ¥È±O<ëd¡ëáž»¯³¯ùý}˜Ä‰Sª4®ïGÐ7:ü0\ï¦ñ+m³£Ï¬Þîé3Hk`”Pµ…@ê?þ;¾¡›˜„^7²©¡ô0ºDdKè­äFp4[ÍŽ±È>Ê2–eu:ÃBŠJµ…FGÍ–墉ï SwÓ$¬@‰é]Üj’ŸEDl—?úK¤]\¡ájñd ñ nØ0nßß+„›þœZLVÖ01iüCK}%ÃøÛt÷0’ž¢Op‰Ü¹«¹½ á§”þ¼]É—<¿ÆcS;òlT÷e¼kÂe{ǰm2kY*ÛöÔW¨~â?@ç[’³nh¬v{V¯ø‚ï¹\}„e\m‹ð{õË¢‹/üeWT)ýœBĺsô¾ìHIýd©Ô"‘øía›en(§y] ì´ÿ|†…wz]µZꆋÈG£hMì>ÚͰF)>òl7‡û8LøüéïnÙ+â,Ø€ge&³MÞÏK5Gç€5²I6côÃÊúî¥kÖÈ$V¬‡+Ë4_©˜–ô×åbÍ6+í&vf¾HyRºÁä˜@¾©m”g5/ÌiYp (ÿ×5gaýÖª\lÛ¼«fKó“<ÇÏuY}2ô"k"¤º'{íÄ·œ&nâØV#s²µŒo¹°táâËÿ«þ¤dä´d>ª$•Œ¤¾-uƒM6±hRBÍ¿8Æ]Ë|öÛ oLü¡^äņ d$Ã7œN~“Û×Õ«œ2 ¹ZšvœX®ðRŠÏ4~óå• ›ÁšñŽ”'àmAî‚c¬L ƒ­ÅlÓùL¦¾“ÀÍÞ`eB\`}Άe€©_Qo+ðjЫ¿Š»#3º§x®+ì$ (_„ mÇÇݶ”£¡XSYGµ C[¿¿ÙJÚÊ•×|…¸P̾ˆ¥Ô± ÌcàÕþÈ–Äw9¢×¹¾_²´2ã\ŒA­!?)Ws¬Þ¸21:,(Af˜ì‡” |­£¾kd«÷øH(AúîÑ*ckKµfÈO4‹I¯ © Åö¹R<õ±HÿÊ]`ê?t¶!çnK!_¾"¼V±|Tó@&ñàåZ À+Ò·hVïU#z|ÖªxôqßéˌщT}×¾íÄM,zþÇ1÷–è|ªxT·3u¨øXl4¦~‹+Ô$aa€l9|¹£L14§×¨ÀPØuÎ…I"I%ÿ=g r@:Â…¨><£ÀV–Ÿù¶´ÄÊ’ÄïÑÖr+Çý7åÈäÂÔ'Qmô?°+Š2‚œJÀ4®NhæØÈùQ7Ñ©R\²*ËQ[ᎅ5.ëEîݾŒ»†¬ß¹Hca7`¤« #õr#;Ìeu}ªª”æ/jK~œT¿°šO¸7%Ä:$^Îg¯èì¶ÿ@šš¦rà–Ò _>›sÑGPrH<·&¥ñÑ,~!Òvï&˜ÃËÊ^录i”DÜ®xëÃc=ô)ºÊTBDàr¨.êþæÑïØ`äMØ*1G!û»»{ ÿçYZ•L\æ“ùǖÄš’UJ!^ë…[AæÉ~ïšißJ“±>{_)Æ£_ÛbÉþ-ÑEWkâ­ÛJ5b€ŽúöÌà—YØ‘+áYd^Y éfÉõ }û Gg¢^dŠ~7+òšÌÓ µ •Õ"0¶•:&ŠªÀÐŒˆC0ôë"Bl†gW:]‚Bh}«ÚЦ‹‡\¹¤ ÔðWò²>ÿÀ.’ýÑ,4¬zéÜ­~ýL˜Œ(1”vP£È*` çbP<Ó»ñå™\ ‡¹æn>•X”ÜÝžPÓËPD=ÍÍùÌшY¿B¿™• ‰åÛäN’Ö”5Mš}t¾¬ éðM¶ŸÌ«þ²¦5mhäõRÃϧ´¾ã”Óî[ïwçÛÂ…–#FçyIÚ®Öà E®5<0;üÿ:ßÊøYä! '"ã¥Ã!ò¤×íX£ pñµº={㬿_L^õ6°¨¦ÝA]ÞÝ- ¡ˆWÔ¯6@ew1¾œúï…²cwrá0¥n5º}¨ÏÝ[ªeÅ”ü7¦éÂ…ýÁÖ v -ñ…&ü ¦³«ñîë¿m£›WÆãÞU^† $‡‡:g­U}+iþoÿ§ÀÿO½!Ê•¶[Ÿu¬˜À¿¡ ò¥Ï_¼ý?PK1ÏÕ“.d2PKl¹B-Haxe Toolkit Installer Template/haxelogo3.pngUX ™IR7 QõÍšƒsœ]Æcll7¶Û¶í4¶µ±mÛlØØhÒ¨±667h’†Mòåý/¾3ó<ÏÌbν7~×uf6FUY@€€€@‘“•Tÿ|¾üw!À}Þ£ÁúBŸDY=÷Ï÷Wÿ» Åéò|>_„÷S’‚ß‚%€ÀUªX€ ƒ“ÓôY¿ìú‚ôŽ__W¶{ì²ÊkSäô·´£6³°P9¿Î†ì Z æÃˆ¯O„Ü *’ÙV‘`"„Xd»( OË-\yG¼R×+Cû¤ŽL˜b^•/›™’%(l¹u\·kjÕ^lÛœ$õÕQm´0O¥R7ò$}ë2jy0¾®zë]¿àúü,0Ùx“`t ·toÃ)-­D©fyvâ$/Ø®¯™ÂßL7“ ƒ•äc‡xbpñfˆ=:ÁB:dydÏšù™Aß”óœ»óþ|Ü·MsÑêÊþòä~o´?4=¡/`&,HÐBõZJ ¸4Ì¿q?H„µ–DmW/`~o$#…AEA›wÄÎçƒö[Ú±×Ü#b+iàh\A⇙Tº-#“ª çpø[i¤.Zï-6I¿;üÔ¤H5-R€š£À<¥ß§J ½4ß¼7]È¡;Ã{pÒÞ(ó­Õ@빞±"¯>ÎýŠC—î0”müK&ŠÚ>¯’DÎêPŸn]Hwµ zº˜:; ¾œw·±$ï®tc"ø¦’ŽÙ =)ûÎ÷{€òCß¾\ýËL3iì±9ùÑÌU EÖÇ|®ýw²óC/}ØVz2?m€­l¾•K:…¤Ø×ÓvÌC¸\(Tÿ™±FøwQT¯s¾ )ã%­Ómvò¾@(:ë ~¢ÒÔ)xíœç=ÁYe½HøÐ~¢­ŽTx¢ØšL5Õúlëå4Wz!-»i—(˜.ž0A#–8š IõLWÏÂÓ ‚ÇT-ÌØ–*E«Nk4f41ž»YnKQ_|˜ðã7W›_¬±Ð«vzQŸ®þô1“w6èû%ˆ# Ú 45À5à.ƒ»Ì' X«+[("DSÖ¬µc ï¬ñ]Pb0¾£ê9 ÷J²òÊþ”Ú†YéÍÕ9àvã¹VV@¬cžúŠÛSyˆÓbê*œŠfã+‚,³‰þ’Flj@þîñ‘Â*¡z»%}¡H p¼aw3ùvçàÖ”v‡ô&ß½üëà„òìñ„*éû—æ×c'¨ÖbÙµ¤ì7™kB¨›=f6u®Ù&MˆxµìáË!®æ!ÿ ïr$](²Õ:Ö[î"u4?q øÜó¯bs¯XhýKšUZ1¸¯x˹l Ä6Ç,w%žgêáݯÃÐ5á·öï»âÒ§ffl Ö5iI@¨€ùt]{Ò\é«I¸)x^s ódöïσ U3c¿>ù1ÒÅÃ,± ÂtsáµdóÄ窰 ‹ÓåSꌒWž*¨Àè?Ó~½zíMÛÓJ"V»B_>UiªAa FwL^ñÝýèzÀ$ünøY'Hç´°ÖÉ€‚Þ'œOà–†‰#ùiã€ÆÄ¦Ãf­ ýqžˆ |³ž9¢.üF¦¡«ÊǪqêH~8¨à,è=Ô`É)æú­WCðH*³5lÌPA2Q§¡“…ÛÙÜžÙ y:˜`ÍÓˆN'˜¹Ì9ãâäXInŠ9|µ05XzãáMšAÆëÐSýà7·¦Ɉjò‘_=oCëÕV-?¬° ˜K~Œ.Ã}2Â8â6íùÕ{âa¸ÑA%±¦¬jK´ÍÊÎú²Æg¸ž¥çè‘c ÏP7!ä 9ÙûÜÂéb Iד¾¤æçÙÞA"]‰¦&ȇJ_ÊŬ7_Ѥt±.7ý&¾‘6—Áf‡˜?!þÆ¥åéð«dÇîä$äú³% xßE—„«Š6#frq0Q©ªxäo”¦âR³¢N; ?p}8\XsJë?âëâlí8Ëäíô»‰áHt륌€ ÑB:œ¹²&vú™©F)¹Vv­{SŸ·C¸éT|K¥ç)Ý^é@Rê?€ãÃÑMtĽAœâ +T-‰ƒR’ 4c8FxeiYÕ÷éo_np¿=A$¥ˆô<>¢¨ðP$ª‚cW™½ß·Ã¨áôR”Ø>àÜŠÒå_Ý¿Ð^Ú²§®'lÀˆ²µA»É‰MþRüg3°X:®àx˜ª¯rÉcüX§XAAÑý^r'_Ш|Vá×âá^{§ðÒo¦Ù†IÆdo:!®³‘:î‰à([,•¾_ëØK‡vBòÚìøÃú¾§V°CûèùÎð8†Ñ©‰êÕLgGt’SE9êWNþq†øŠb I/úÅž?³ wßNm•w¬cï²'¸&Lè²mɆ]ÃNT µI38ÅÆ'q|0|…sÿ¤K£GÂÖÓi]„S=HÐÊH€Å¥L=—<ø7ÚAâÁÑ’é1˜FG ~ðâ£gfŒ2PÕkæÔ~é×·Q¾8¶Uä#Oîÿt»`w Ösšž?$ºÛ€^äµ,¬EŠð.üâ«<,`;zwE輕ªG=Ä%œ”¤f0¶›[#ñ%1h¢ìƒF/°ÐN>·î\hžgªJÃMÊÜ•(Cå?xkí._#Š)y?¬)5T1WXb#A_Úb¯eDKÁ»pø'Ì·¸:ØÃXÈ¢mg(íSÀ yÉ„©•p¸+ÚþBÃ$îF¶šrR¸«« Ò¨`¶¯¹ÅE­sH]ÎkR=Íé¿—HoлgD\ÂÙ¨ c~¥¸dI!Øž“R?ùgCÂÉ(HP,´WTãpral©jÆ¢w¦©+*¨+nDo§D=>B]Ïž€jÛtŸòR®òÒ3Ïó»°ÔÉmÀ§oOœä?4í¨Júµ׋ô+Ë á–éÊ<ªrÕ/…ˆ{Mp+Æ¥cò$>ƒ™qiÞ’kÃ/ßUÊ/Ôïñca ªªS åS |¨-¹/o~ÿ;Ý”ù;ÒD=ºtÉç*“=è׃ç.ÅŸíÂ?*üùÕ|«ÿÜýÀÁop9o¹â."‰6fwkrüÛøëjå×Á#¹?°Rºìâ|HÑ~6¡.·qü v?Ç*¼…̵ž|xÂ#GEH„,3>¿Á­:é3>xÿìu Õ ñÉæ&åØ3ö’7íxáúR;4”ÂL_.ø‡Ó0? rPýŠ˜ßzù<Ìñ i+(¤,;ßðŠd¢”ßÝ^¡€F¾¶ïÄÛA5O";Ïpã(‰?÷ú CÔ2ËK¢ë rt€}ID;SsøPûxÅÃñ ZòG„ \/ ß,(ŒÆGì“@y£„3‡4 hÿSml±ìþ‰ð­ì~m!‡-=_]YÃn^*×>)ÎÿòüVGnq×)UUëYðбYúÅLôñšÖdŸ[&en‹y~®n>r$ÏcƒÇ® +qi‘pŒ®*vN,¦ïÈ(ã¦N° -µa&$¤å_ca£‘YqêuD¢êyºl3’Zä­Ê_æb|y+CZÑ„Hð#‘mãnû4kqLMm\H{¨ª<7g·hõžÅj²»&h1‘×p{c +à"zƇ=3R×9ïBÑgN2s«BT@,G–Q\t4Ý(Øì¬4yç`ÒU=tÙk†ð¯äŽþüo—ä÷½Ü[a¦Ì_è‘GÞüÆÃk:ÑÍ0"û.@è‡'Bb©ì¡Þ½¹jDÄ‘n„j3yGZßH‡\É}­¾ ˜¤è¿#jx†#}¿o¹ë$ÎüRS©)Ã6ÏFÉ»)Km«à°¨•@(ÄRÙ8ä*Ì'Œ‹&øW%)¯6c&ÉÊ´›ÙËÚ(NrÚæê1;…ó [Nž{¼qø®“ÓÐÛP61)ƒ3¥ÙH:’]Ó½À0{5ÑÏï 2qýü*.ËŠ*„©®DÎòçØ'FN7íà›ÔåÄÜw³iM#W­™«æýù iYL#tbY.zLÛ]f­·áIõ[ún«Î@.˜øÏ@´µ„Ò—¸Ž †VKó—u óƒ¡bNîîóc–R?ÍC?Qž÷CÀâÈ\¤l)8ÁYé:¬?±€#ˆ9`.¶\¿Tf> ¢KŠ9V%9„V Q3Kþ± Xê\æ*¼%D®z ÷åóSGJŽ?2RúÉ^™‰;íeÎé(·n~Æ(¶C ÷cœ4ûÁ£lIχŸ§|;5ñyj³X5p(_^nŽï`£tãÔÐ$€ÉŽDÿpOt´˜º©úêyÊPØÊXð/='¡€~ 1gq8ÎF! È†N½'A¹-78_4‰£¬—Áä[º“. Â 5ÍÜt ˆí¨>{ x0ÓLó¼´—%¿ÖY¸¶‹\*^ÀˆmR`˜àÛèòrëìÇÝ86˜ÖeÉÚ Ù«&¬”»8מ®vå6\¸£®-2žh®Õ¾a;H<ì׿X'v•Õoý£YýÛw2—8ªŠa”õ•}Æww˜¿JÜ•ìµç7É…·ÂŸvþއ€ë…†Ë”j‰ Iûr±µÊ’1Iqmá©=È`¹ðÄ:x†ß¶Æ–h–-Q…’æÿãs«E˜x´öm™yÁoÒpÖMpÞF´œßgüÑ¢4Ióî$M܈ÈpÔë5Ò¤ðï.?q°-LX-Ëí»¡&x4þ´ã„ëªÍ-{¯an¸Oµl«¡ï^×q¸“~ß1ú®(B[¿%r)ñÈèãá\¸òuЬx¢üÐØCcÏZ!pxTÒ¯»0·<Žª6g)ÕÉÍ•¾uñäŸ;»fÛ¥Pø¼Tú²–Oû‚ƒª©.ÊÀñ‘ó½ù®í/¸¹ ütƺ6‘i£Cæ3q Œ‰XVÔ¥>^Ob |&8r㣊Ÿã¯MbQÍÓjF«n¹$¿rðDÚ‰7’îãíŽnö7"«NÙÛþO>!͸3çÄøü˜£ØõÖÏ[} Ââ²b(ûÝÈþðµÙ©R/Ë[ÂÙØØØM¬AW$7ÈÒ÷s}+7ŽzÉb­êÔ¥è óÈꪠ¥fÊH}íŽòè†vï¨ ã)ûãÜQk%»+J*­(ÆSÍDm‘WµòŒ +þLa…Ä/@L}Xº«þ/Óg‰ÝoÏÅëuèFø?z7«ÏšuâÌöKÖÅ7|Nrü¿9]œôä;ë¶ ]w|ˆ½h¢Ë6~¨=_&±¶,‘Ç/,0ãn*µ*HûZxæE½¨cIr‚›UnGŸtý5pœóœõʪ‹§®S ÃF\"*·Þ~îžVWœƒ‡ßL,ºø~.²M»„í}PÜ,úîLFt‰j=Üów¦˜Å™êŽn¬$x`{èåµ=¸]L«B¼?}@ØEµÔ·¾‘¾ÅÓ¾D¢¯´¼yîf…D䃯X8_S® ÎPûÌ,c;ô|ˆ6šÅÔÔçç°ëδú|ƒ*·µ r¶|Žîªg¦QÞêP¸æ-ÍU³)wœ^k´È¯×Ct†b4 Ïšgs„š•>H­Xñ×§iÞe¥Å‹à}ÉUsKën÷iÃhÐAȦõ&O>=ë$ñ¼É»pŽ9‹iýp>T V­\|ÆÞýÁÄ…D½Ï m T98±¾»¡ÓBLc/ë³}^Þà§¿ÝéÚÚ¤°CuHGÓòaßÝ> Gûl tU%œŒí¹ˆkÆXD¶i«UƒH=±,£˜ÍÚ!.e±@7«+4ÇF#Ê×HÒ¼GÉ3'Íö-Õš›×Áo:È{¢±^ñÍ­’÷8Îm)j½Ž£<Ó~èæÒ‰\õºþ›Ÿ+›S„–ëy>¿!C毄ç©V™uö7½hг-+Bf€tCŠeN’Ôs ÉŸöVf¡íȰÄz˜2Œ‘D·ÕÚ6O9šŽõñ»õåœ/ß]¹à=5øyïóg9bÖêý%²-Peð÷ËÐÉšºó`fOÁuÝwr»éoQ)¤ß“Qÿï2vE?äåüB"‚Û¨c+Ù?‡÷6ØlůìNÒgrŠ^ž™woØ7]ŒøêtX5ÔíSŒW§Ì­ ‰3Mt§0­Œ¥:Ûé—Pª Úœ$ÚÖÇ­^6„Ït…§yÂxG½_u¤Ú”éÒ8ƒ£tëÄ" Ç‚ÿpvÊí½Îhõ:öÃnûÃ{±Ý7¬YÜ#-çtEÙE]%¨¶ Ê‚ ’*ehY§—!¨—ùaknwƒäîS ~ðÌÊ€-þkÓ·cúS&%ÇEȱ•¦rì§fÿ7/üƒF‹õ¡ ó~ìO‹ Ç+Фs:9¾KL;÷ž¾æŸ ‡M&ØDrÇ®{y‹,ƒuÚZ÷ Õž nÕ‚œ¼©#©VÕmb! dZ~ú'«Á:GR©¦7V—Å{ï͆Å8¸ ÄË"Á9å¯!tRŒŸ*˜z"›uk7Ì à<ôr½Œýð½ê_ò` ¦†ƒŸ—Ì¡Õêã ŸoN¸ÈŠ«¸ƒ!Ò…;g¦B,´Í íÔþ88Îj 5'؂Թ¡ýµ6;3¹ñMÁÖ‹w@°`ÕVó°lcI™-V.W¿4oýÝ.´/¾‰¨ z&aÙ£DsrãÁ©–§£ßêÇ„Spz¤=~TYwÅ]æB­…ÞE 3B:ÖHwÊ]F]®ÄŸÞ ÖÜ‘ÞVppr±ja縎F66:S M— ñ†Ö«ih,ËÂä/ôí;¾º?43§Lñk-̨(® ^¾"ÜXC´½^W<Üž‘°Å[ÉôŽ:þ ~*‚ LüΦ Ú°Çr˜4Ò5þãuÇôW]-Á j¾¾T0k–]å]73ÍÌÚwû%NSDð$F˜Ó8ÙÆx©x¿#DeÑYÇE€Zgæà&¶#Oåa˜†þt‰Ù×]Í{ïñckµSdâ}Å4ÌeKyÈçËØ*FÍW•@'ü¯¼É}[DÇ8Î#!¿5æb¸-Jƒ”hAzw;ÿ*yD*>åýù”xËXŠV 3‹Ö‡ü N) ðg‚-*9GvÈ'u¨ƒxÊà (]Qä´Ùv%>§4úŠ–}>ÏÒgNø|H+4•yƒUì E߬¸b8)*÷¨Þô%u“q;2ÌS]¼ˆªõz+òi2Ž@þáœcz;ßEÂe!{ê{ŠŠµÖ+6¡@^æ÷ú‘P p{Q¸·Ã”! • ½5Eؽ{½løk…¹«:¶¼6‰HðÂÈ àÞ±}Pëwã_óŒ^ïõ³¾›g‹u^~9qt9x¡Ó¤M¿™ËH!&ßMó¥÷Ñ©ÜÓ,âá°„‹óŸx¬~S¹ì,Y÷-y]X“e˜†ˆ7Ïi¡Ðéƒ:Áq.;¬lP«BÏZÔ}€2Jö¾ÿÔ$-X 6ý…º óÙ£KSBó2œ¬x¢žÁÞÑÂ…Fí.¾+ ´¯ Ź_9f„C÷^ÄçFŒö²k…*¡ð%¿@ª¦4=ßžì­3«Ücü=Ö¿z"ЬÄà¿ò`›4@˜À™¶¤Ž„íÆÈoÆö0Uý ;úÿ­JYº¹y…€ ÿ÷_] ¯ä#Êß×*n>ŽU…ш4R#Ó3Žðßúò™`ð@uÆÒê;Ìžr½TÕ¢(hÃÏ@®¦ì˜0„<íŸ×™hâÕÀf?*þ#õ¼È\€ÒZí²µôIª}#”lŽL«ài|&môJ0ÉJe|w+³ úÅAîGS@R1~m¥C†*ïÍK9•o^dÀ ÝY1tÈ÷ à·Ë:KcÓ´™$m‘é\ùOãÄ ¼»1ÂKî&S¬†Ä”Éì5+Ï<ƒ ª!É…lÜÂ3«D·0šŠ úä­oÕ²WÊø¿'c¹ØÌ¾”ìí¢*¯þ˺ÄâðâjðºqhÑ¡_…Ü —=H·ô;ÕKÉ—Rš:D®p+ꚇôÓ¿._P>ÄiB8ž…E:p$¥h>öÓ”Ù:¾E ß[}½d…W úëM;†ÍÒìùÒ„ÝrÙuÝþ(P5ÔßfÄEU4Ü®¥9͵jZÏg í`œªlf4èŸï¶ÈZJ²ŽòúÅ•j.¤'WZo*Qø&Y½(&›Wø…qaU|åK‡šåºé{‰Ý²r³R&ŠBUÓ/<•8úò=N‘”Ú‚*šÐ/Nûë Íæ`Œ{u9bÞ²ƒÀŠv¯£(™¢£¤5yÈõRgÕóÖŠŠ–ȯ ‡f‚E®uFÊù÷È}2ú}ÎLÍ8æo£íjZ‘Ðó2Ž3-³³‡™úböFô2cñh‹C%&s±êS‡óxZ6ô,=bÐ}(¿¢êj†£o‚:Ã2~sö(ŠéÈa„ãw2]Þìb; T—Ì•ï!N!wbL >•¥¬[B_)Ap~•ÚÚùîïà#¤™$6f¦ýz˜|ÓÄñê#8æ j ÷û®aÒ¾cÙ:õÁb*=‘]1„÷¿:ŠG5—Á€²XK\s4.Lîé&•Q…ÌúJбüXðøÙ§Psw)óVøNS è6£ŠºÍþEâMéô‰ˆ‹£Üõ¬k¿Q î­—œ±J„¯—@‹cK ùëU.ü¡Aý]D½*""ª.­P=3aLyZ¢µÙ-ž˜-à`Ü¡Ý6÷m4úòµÖ>øQ‹4€K‹ô"Cè†ÝMrul·æg!êÖeËЂ;2r¥4x)~+\­>W>÷¥¾ã‚ìù˜~›;•E7fÉHüþ}è0HM€ó-HÓº¼ŒªýžôSg®WH³>¸QŸÆ ^/5Ôî{§ð[¦7ÔikÍðspsÙġЛÇ0±¡®!Tq§m2õe"OýÈÑ–e#4³j ácíû2¸G ¹‡i0¶OWä Ê|zœYÈÅe]",}Û$à-n›i5–™R¿“æ>Hî`Æåzý.ýѼk0Â-KöRí‹q>Åñ¸@\íÿÓžr#ô3ÕxK*™Tßoô¾á|Ú_ýSp8ÜOëLNcúÏÈÈá]ñáåfÅROÂoJC Ì]æL#ö+µwtù·tDïòSd"ÛFÀéɇOZÚ‘ö϶®ÒÁYIíw½ÏFƒ T(×ÇÄήòïWâj¢ÅuÆ++Íõ8¡ù ~²žEþ×à‘œ ÓÆäG>!Nsü±þúŽÒЫÿꚌˆhÓhkÀè#u9wß¡øÄ Wù²F܆A7 y*¬ûºG=ø‘©òs½jÞÒ¯rÜcTø¬­9·EüY8+šò`2{L#·FHUN£ú™é®urÒngùµ†®¯jD›Ðÿ~ÕE᪠Šë"ú|É|”ÎµÕæ¶$?3wëáêÑÑoqô†ÜYêSã›G¾YàÙ -[ÀvÞÇÎ:ª €ÍTç1ðß ê‹{r>1#XŠía^åùÏæ3ìË Òî^m‰ à/H,Œ‘çVÖ»»:œ²LcèΫ÷ÙÈVaÅpûÒµ_ØM.x› Æû1Yfâj¥}ñLð h#¬Ç‚ºî>¾ØØù]ºî§2¦Dm\ ÂUú\Ä™EZ#9ö õè?ÛmF»ñÜÏ|NDæUQ¥êí—€7*gT'q.õ!ÈÂ'î–Ò!­óe¤¤RuóV'¹ =@7“¡‰2^¤,²»Ð#1Àýíé;gÛ€Á Éä˜l"}[ðœR0Ë‘‡vé¿çB§) ¯.ý¹Œ™+áÆª!|IÁ— ³²b¦.?|»ÉŸ²}býÒQÒ/Š»Mš2ñ‡ŒšhèB¬'œf³\… ^+ûÆU’óšsBºùD I \ÉÓðØåâP½(>Nïù:Ô|² *¿ö".ud”ż›÷=äúÙ‘T5{U/¤ÐTf¦ùÂ]f§‰ã¢®þ|y«}X€RG†u…x‚oùq¼ Þ­Åœ,ˆl d…jåÇ®¶«‰uPDÖl`E–ìˆ8[XòÌLm{ú O¸?8*r@©×ið§B3âò±ì^ù± ¥Â¢Ó“Y]à’+Ü©´*böD$>E=›æºµ¨¼ÂϰÂÁC.~žÓ>8  rŠ÷=‘W©c%ä~ÆÁHâ:½0OÇ òàêfµnßf †îÕTçêé¶ç Än—5ñbÚšÇ;>¼M>ÙÐÉ~gá-ÒS:™Üý…&‰å;8 ¢Pþ»¼Z+N~©õdÓL#€?#xXéc¾ïöu4ÄNm•ÂÙŽ¤›±¦=ð4اÔĬºàqtÃ{Öˆ~ +€D¢Wx§"µ@DcC¬ÍÃZ£VŒK‰M¢i¶Ð3RNGkÕû8›1Ûöȹú⥰ä/ÎHwn«&_Ío—ÔK)1¥´<éœÑ ºX3îÈÒÜ‹òFŸRg¯wÂ`c†â}§ƒÂ¬Ôà†zBû¾ãªLl|‰GÊ|à*_ õmMê[ÆÃeÏV&ÔÖç YÚO°©#žÖÄl¯ÒÿQrç0‡ ïS­H\ ºÊÔî¡•<Œ ïØýKiCyµµ$üßÑ ÄPR*8Xß; nâ€sú¿Ùß´?ÏÍÍ¿6ÚÏÂéœÒG1¨»E®$ É2 ^S÷ƒcéà,v,R¯ÉF7"ñ´«ÍyE&÷^é0ûHù WõÉ¥©;+b¶uæ2˜ó*‹§†ÿ¾$jô: .h-{Q/¶[ž””Z`/a0ö¯iû«á·pOaZ)•^É|RÑÆ$c»¾®ï9/ îýK”fË·ÑYsŸ£ÐŸÞ~qæî1,ÿòúÊ}bÊY¡gÅU`éݯK±f°gùgf ÇC/©[ö¦da#-…bT eG&é² _W?„È g.‡è³Ó6írw&˜[ÿ~Å´jŽ<Ηʛ tèª:ÂßÝy¦¼º3 ”„&…kÙ`D§€÷—¾û ,¸â~byÝãýí¡ *'`m ¹þD1.^qþ2‚äøõE¿tsûÍ_ZLŠ{ ÿhÿ¡2Ñá¤Ç´5Ãþ܅¢7B‰ ´gV&Ìèµ×%&WÞX#BÛêÔÓ>û­©“ —zÈ8öJGêq”|¡^üò'w*([ù(*1§©—•ÓpŒn›…g8úWÈ6ªZ=²£*w‰XŠ"Ü“e–#iö+AF÷ÉëaèÒì†DÔZ–;ÏT >`[EO‘ÐÀj¦ƒãèÌ*ß1ØŽú£ãÆM.$Þ¢ó+@!TÕ^; `ų÷6›{ˆKE[ù½Ðû$l©I~=ÕW<Ó/ð…ö¡y^§g'}îörüÎЈp="qk|פËgèæ”£’Š\»ç”ŽÄ€:éʃ['®VÝCx®×ƒ =~s=]É a T|Ù-oSs[6ú<̺ œQê}£‡Ÿ{íëùÐÍò`óSúÚp c~éjHÄ~LHSñËQXH ‘¯DrŽ%,³ãPNåWҔߖwÃIêãª0Ëœ»8‘6Ÿse‚ÇzÿÞîô\;àßDôW…êësóxÛ‚Òy‰õpéÿÍ­E¡Ãß{­°Ž&Ÿ"ðÛx‹Dycc˜µù$tcÓ–cŒ |»vw9ê:1FÚ–S:ìjJ ïÎîµKþ¸ph¿)7Õn£uÁ:L£/(~Æ[‡'mVº£ë‡•HS^0ËpÄáÔ$Úïéz ÔìÉyß,~ÒœJ÷û.›êô/º.—ß4ưCÎn†íUû1°x»€¥9=à÷G!ŸÄtÅó’÷_ËpG·Ü–tȆc êC yÙǶ¹„úTèÀ7MFÚon÷œ²ˆ­¶¸FJâ@a[…bïÈö4égN gVÎÇWˆJx ⛃!èô$cÿÑ‹”ž¯c¼öõö¤y±òQxÂHþ ¯kKÞ"p½ à ×Ä-Bþõ”»n¦oëâgjÚŒô¸a˜(…´F՘ͲIÑàɯ*÷J„ëšY¥–éoÑ Gܸ¿‘LLE%ç%3Ûa/eg¹–suu8Jµd‹CÍÔc±Rˆ·R××Á&¬¤A*Ò7@€éÂí|W¹«Eî-p¥Ëìù Ò†4¯ÔÇܖ4]T÷³PÖÛ®'×éS{Id½a¯:Ss¸_X{MA^ÜhcßPƒ¢û^–j!fꉫaŒx«‚igh|œ·`žÌa¬€‰@œä¨gY»Áí k£šnaµ†[©–„¾3òÌFÃENʳ =Ø‚>®´ëZ`ûû†|oRæD…ÓØÛ[ÔôgN§NÀ£È¼ÏçQTC@„óÙx¸áùƨFO¤é¦hãW¥0T/œõ°;<–B0µäõ¼ª¶j_±c˜W¹ ^+Ò:NýE¶á°¬±}€Ú ¬jXrâ˜9÷?I¼AyÙŸ½˜¾–qòÉÂfË K–‹?¦Äª§BÛ©]”¨ÐË€l9ä!Váãï(ðº-y=ƒ¬¤ ¤÷dŠ<©™;Uõ<›£9«ÂE·Eza™¨¬ªÀGwz\èaRG!vj_ÞΛãϘw`a{ î ŒžïéCÇbpèÏxÅÓXlTæ8ÏLdÒYDÍš`;Å_æA=³‡M=¼*“TÈ ”ݵ§êf9’={h¬•íèLJWÙ?¼äÌësÛË¿ÑÛÉHÖcV‹‰º1 ù@mv_i¶ª1ä›÷ÛùgØj>t˜]šÄZ™«_‹ÜfïYÇÓù:g+ôIh}þÞäVÒL)ùFß—?*Bb;ҼȽœí,ªøªRßx”ÓûÒҹȩS`$(H¦Ú\9+ÂÐMXÎöØ{ïòm‘% ëD ”é”bÞ-‡‘¼š1™5óá’Y–ó,„™ŠÅF56±ä)PòÍE •õ×Ô|]qƒL7Úé"¬"‚;“}éI3‹2¨s‚nÁÊòÜìÏn  ¢®÷ïXß1ßκŸE/¿¯……÷/ p8GÜÕ ñ†0A xøäœLmÓ‹G—#üÔOvUJâÂ)ù%×Á„µžÊø ïÛgÈÙÎþ#ûÌ‹àëÇ{Hã:;ö'9â/*ššpÊižs«”­ÁÊ\Ér–l÷jÊkµ£¤‹_Qí_a`ãmá3œèÛÐ yªº0ce–Î"ÒŸ°_{C­;Rg!°ŽÞ<]y‘Ö9áíÀk£ ÈɩÔÍÊÃÉ»H@ø3ÞÖlÕ0õ%É™K¹Vrr#/r˜¬ä@ÝcÖñfR ”©Ã¦*’%HG¸Ù9o5üÚ&£uµKס´ïÎꫜiƒŽÏl©8!‡kp6k¯Ÿ|¡¯ñEøM.>,ßþ>ª&s •9Cûn¬ìŒù™BlÜÙ*ˆsTz‚YÆPI«îÿÞ =4Ÿ¼£fÁ÷Ä.¸ý–êuéâ–W÷„•2ô°óÖ)!¶’+9N\†Õ÷ìv°›Ö¾¼õvA 3|cŸ¦"ïîŽä;bÉNÀkå:šáB¾‘ÖœÃ}bÝýÂDà×àzXømþŽL;zçü°ñwC¼|Ün»ýÛLiW1‚„Öš¤Ô‡ç#r3ËccP!„Ù¤ÂÀÙBim¥´n%of‰S›bñp±ŒØT$Ê ˜ CèÌp íN«ðúÒ~Áý6ýÞø=ÓAíRvªu†º(aÆã£vMö¼{±àUs0£í:úž„zÓQÌÊò9¯ Câã!¦¡³•GewÝþ‡Ó;÷¶ôBs;Aq {°ÚëÂÜ8±“' Qxýˆ>7 ÞhŸ#ÀO¿,KEó€DÐõÌ㺛Ï`!à¡Ë]}A Š)çjÓéÎlãªg!5ÆÃ—‰Ó\÷nâ-±ÎQ3`PÐê<¥'FQ³×<“ýolÑpsR«¯æöZQ–Ð0×A³'Á2ŸÈÛÉ‹8Œ,ö÷ªÚ\§ ³yùE<5øý?ìâö"Zäù“qöGàÿ¿¦ÔðPöòŽ:¦ñ[U^»å¡tyÑ}­²ö…¯cבLê²åî»`Ãíôxf–!PSVürÇ7ž¾Á0ºÓÚ .¤ã‹w2^k¨ÛÏî§U¶µ—ÑìÁû¯Y+Ã…ö/çxj ‰Æó_Ênµ)©å-,V²9éåÛgc[6 -éQÓmR©Dry¬¬siŠóÁc)Ð%YºÖ6ýïNc¤¹ÖéªÏCXzïn°Q¿Ë¥½€1² ò&ðtê¿Jz7™&³ˆt÷³9K±ðÙªOyµR‡M$»iîBˆAôOEêZy®çqRï“P¡«Ð0¨)añÄÜÅWi‘Ͱ*7Ü¡ìø){(&,)—‘¥,9>O¶,½/|àn÷[ Äš_ýk ËŸ3†cÇ¢’·mz1ÄO¹HýžÍó·lƒìøØÙ ~E 9½4.ÛPBû[Ñá÷‡Ã%5ûÜyF@å^aNø'õëå¹9s{a«bL Ä÷C„Ë\– ƒ“ñ; Iª²›ß5¼rù_JøX(¹çÓ^ƒÀΆ‹jbàä_’Ó^ïX+¬‡^ÛOÌB3 5Í9’æzå3Œ(ÿ^]UC'Ng©ÅÑ0†m›gÂj-üd{b"¾·erƒÕsüÔwGù¼ù›´ŸgüqDO𖚉´ë—ʱ4Þ?™Ê–!©×5ÍôÇf"fcKaL¿¿^€@À2{}Ç%®AŽSc¬ö—@ù ´m‰#³ë!Úá¼óÇ,’ \ #5a½¥æ¤€Â´­©µ×¢{¬³½ÿ‹ÕŒóô)”'ójœ^ ñ¹ä¤”%ÄMCÿPKãæÇ¾U;Y<PK >C/Haxe Toolkit Installer Template/neko-2.0.0-osx/UX ‚IRkIRõPK>C8Haxe Toolkit Installer Template/neko-2.0.0-osx/.DS_StoreUX ‚IR’IRõí˜;Â0Dg K4.)Ýpn`EÉ ¸W ÷Ñ!Ú²RP%‚y’õVŠiOØð¸_€ Á3>’Ø„®6Î!„Bˆ}c®tÜvBˆ2Ÿ…®tsŸ:vc2]èJ7·±_ #èLºÒÍÍCË>Œ+Š1…X¡ëW¯,Äßppåùû?a5ÿ !~‹ãuð˯vëê†õK@🅧nl¡+Ýܺ±OPKjˆm²PK >C8__MACOSX/Haxe Toolkit Installer Template/neko-2.0.0-osx/UX ™IR™IRõPK>CC__MACOSX/Haxe Toolkit Installer Template/neko-2.0.0-osx/._.DS_StoreUX ‚IR’IRõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPK>C9__MACOSX/Haxe Toolkit Installer Template/._neko-2.0.0-osxUX ‚IRkIRõc`cg`b`ðMLVðVˆP€'ñ ñï1CB‚ LŽ@솦„!.šœŸ«—XP“ªWXšX”˜W’™—ÊP¨o```hmj˜h``l”f힟Ÿž“SadàœQ”Ÿ›jíh`blbnéªkjääªkbaâªkélä¨ëâìldäèdâdädÌPK#"ü¿‘ÞPK >C$Haxe Toolkit Installer Template/out/UX ‚IR’IRõPK>C-Haxe Toolkit Installer Template/out/.DS_StoreUX ‚IR“IRõí˜;Â0Dg K4.)Ýpn`EÉ ¸W ÷Ñ!Ú²RP%‚y’õVŠiOØð¸_€ Á3>’Ø„®6Î!„Bˆ}c®tÜvBˆ2Ÿ…®tsŸ:vc2]èJ7·±_ #èLºÒÍÍCË>Œ+Š1…X¡ëW¯,Äßppåùû?a5ÿ !~‹ãuð˯vëê†õK@🅧nl¡+Ýܺ±OPKjˆm²PK >C-__MACOSX/Haxe Toolkit Installer Template/out/UX ™IR™IRõPK>C8__MACOSX/Haxe Toolkit Installer Template/out/._.DS_StoreUX ‚IR“IRõc`cg`b`ðMLVðVˆP€'±ƒøA L…VPK¾CŠ *RPK Ö>C(Haxe Toolkit Installer Template/scripts/UX ‚IR$IRõPKÖ>C;Haxe Toolkit Installer Template/scripts/haxe-postinstall.shUX ‚IR$IRõ}O» B1 ÝóÇë&”Žü WqðöA m/´Wñó uÒP—óÈIr<è5UÝ#µýèmÀxyA¸Í .§•r…êšá Gù‰›Ù8Vî™™ÈRÀÊaùös³àvÆ}% C1__MACOSX/Haxe Toolkit Installer Template/scripts/UX ™IR™IRõPKÖ>CF__MACOSX/Haxe Toolkit Installer Template/scripts/._haxe-postinstall.shUX ‚IR$IRõc`cg`b`ðMLVðVˆP€'q%ƒø«ˆŽ!!AP&HÇ æGSˆOÎÏÕK,(ÈIÕ I­(qÍKÎOÉÌKJ––¤éZX›š[Z˜PKpÀ]«PKq>C:Haxe Toolkit Installer Template/scripts/haxe-preinstall.shUX ‚IR†IRõSVÔOÊÌÓ/Îà*ÊUÐ-JSÐ/-.ÒÏÉLÒÏH¬HÕ/.IÁ.‘’Ÿ PK4’Žp);PKq>CE__MACOSX/Haxe Toolkit Installer Template/scripts/._haxe-preinstall.shUX ‚IR†IRõc`cg`b`ðMLVðVˆP€'q%ƒø«ˆŽ!!AP&HÇ æGSˆOÎÏÕK,(ÈIÕ I­(qÍKÎOÉÌKJ––¤éZX›š[Z˜PKpÀ]«PKܹB;Haxe Toolkit Installer Template/scripts/neko-postinstall.shUX ‚IR04 QõSVÔOÊÌÓ/Îà*ÊUÐ/-.sóR³ó1’1Drs0„JòósŠá¢9™I ’ÐK©²¸¸ròt‹² )0f9.eÉènÂ¥07í¸”‚ÝŒÍØ4 x‡/PK‹´ÓJ\UPKܹBF__MACOSX/Haxe Toolkit Installer Template/scripts/._neko-postinstall.shUX ‚IR04 Qõc`cg`b`ðMLVðVˆP€'q%ƒø«ˆŽ!!AP&HÇ æGSˆOÎÏÕK,(ÈIÕ I­(qÍKÎOÉÌKJ––¤éZX›š[Z˜PKpÀ]«PKì¸B:Haxe Toolkit Installer Template/scripts/neko-preinstall.shUX ‚IRí QõSVÔOÊÌÓ/Îà*ÊUÐ-JSÐ/-.ÒÏÉLÒÏKÍÎçPK%=p×!PK >C @íAHaxe Toolkit Installer Template/UX‚IRaIRPK>Cdè 0) @¤NHaxe Toolkit Installer Template/.DS_StoreUX‚IRaIRPK >C @ýAÕ__MACOSX/UX™IR™IRPK >C) @ýA __MACOSX/Haxe Toolkit Installer Template/UX™IR™IRPK>C¾CŠ *R4 @¤c__MACOSX/Haxe Toolkit Installer Template/._.DS_StoreUX‚IRaIRPK Y:C= @íAÿHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/UX™IRYÉCRPKY:C8šŽš÷C'½P @¤jHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/01haxe-contents.xmlUX‚IRYÉCRPKY:C õ;ÿì†G @¤ïHHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/01haxe.xmlUX‚IRYÉCRPKY:CŠ/îP @¤`KHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/02neko-contents.xmlUX‚IRYÉCRPKY:C™§Ò•ÛPG @¤MHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/02neko.xmlUX‚IRYÉCRPKY:C"›gyñœ F @¤}OHaxe Toolkit Installer Template/Haxe Toolkit Installer.pmdoc/index.xmlUX‚IRYÉCRPKY:C%í!Ÿ(RG @¤òR__MACOSX/Haxe Toolkit Installer Template/._Haxe Toolkit Installer.pmdocUX™IRYÉCRPK >C/ @íAŸSHaxe Toolkit Installer Template/haxe-3.0.0-osx/UX‚IRgIRPK>C§N¼8 @¤üSHaxe Toolkit Installer Template/haxe-3.0.0-osx/.DS_StoreUX‚IRjIRPK >C8 @ýAŽU__MACOSX/Haxe Toolkit Installer Template/haxe-3.0.0-osx/UX™IR™IRPK>C¾CŠ *RC @¤ôU__MACOSX/Haxe Toolkit Installer Template/haxe-3.0.0-osx/._.DS_StoreUX‚IRjIRPK j>C: @íAŸVHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/UX‚IR˜ IRPK ú>CI @íAWHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/UX‚IRÈ IRPKú>C€Ãþ Q @¤~WHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/.currentUX‚IRÈ IRPK ú>CT @íAXHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/UX‚IRÈ IRPKú>CȈuÒéf` @¤›XHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/haxelib.jsonUX™IRÈ IRPK ú>CZ @íA"ZHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/UX‚IRÈ IRPK ú>Cb @íAªZHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/UX‚IRÈ IRPKú>C|ÑøÅéo @¤:[Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/ConvertXml.hxUX‚IRÈ IRPKú>C?ÖA% { i @¤¬^Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Data.hxUX‚IRÈ IRPKú>Cü‰{Fcw @¤xjHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/dbconfig.json.exampleUX‚IRÈ IRPKú>C¼šu˜Ð m @¤skHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/haxelib.cssUX‚IRÈ IRPKú>CDhŸê¾)…i @¤¶oHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Main.hxUX‚IRÈ IRPKú>C–š÷Úöj @¤šHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Paths.hxUX‚IRÈ IRPKú>C¯,í—l @¤Ñ›Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Rebuild.hxUX‚IRÈ IRPKú>Cð§Ù…š Ó$i @¤hžHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Repo.hxUX‚IRÈ IRPKú>C•^ØYk @¤©«Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SemVer.hxUX‚IRÈ IRPKú>CÛ±'h‚ Ç#i @¤«®Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Site.hxUX‚IRÈ IRPKú>C#‡i‰‘\l @¤Ô¼Haxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SiteApi.hxUX‚IRÈ IRPKú>C™5 Y:k @¤ÁHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/SiteDb.hxUX‚IRÈ IRPKú>C¥!Ð0Ám @¤ÉHaxe Toolkit Installer Template/haxe-3.0.0-osx/lib-client/haxelib_client/3,1,0-rc,3/tools/haxelib/Template.hxUX‚IRÈ IRPKv¹B1ÏÕ“.d2, @¤}ÌHaxe Toolkit Installer Template/haxelogo.pngUX™IR/7 QPKl¹BãæÇ¾U;Y<- @¤zûHaxe Toolkit Installer Template/haxelogo3.pngUX™IR7 QPK >C/ @íA:7Haxe Toolkit Installer Template/neko-2.0.0-osx/UX‚IRkIRPK>Cjˆm²8 @¤—7Haxe Toolkit Installer Template/neko-2.0.0-osx/.DS_StoreUX‚IR’IRPK >C8 @ýA¿8__MACOSX/Haxe Toolkit Installer Template/neko-2.0.0-osx/UX™IR™IRPK>C¾CŠ *RC @¤%9__MACOSX/Haxe Toolkit Installer Template/neko-2.0.0-osx/._.DS_StoreUX‚IR’IRPK>C#"ü¿‘Þ9 @¤Ð9__MACOSX/Haxe Toolkit Installer Template/._neko-2.0.0-osxUX‚IRkIRPK >C$ @íAØ:Haxe Toolkit Installer Template/out/UX‚IR’IRPK>Cjˆm²- @¤*;Haxe Toolkit Installer Template/out/.DS_StoreUX‚IR“IRPK >C- @ýAG<__MACOSX/Haxe Toolkit Installer Template/out/UX™IR™IRPK>C¾CŠ *R8 @¤¢<__MACOSX/Haxe Toolkit Installer Template/out/._.DS_StoreUX‚IR“IRPK Ö>C( @íAB=Haxe Toolkit Installer Template/scripts/UX‚IR$IRPKÖ>C¤*c‡”; @ÿ˜=Haxe Toolkit Installer Template/scripts/haxe-postinstall.shUX‚IR$IRPK >C1 @ýA˜>__MACOSX/Haxe Toolkit Installer Template/scripts/UX™IR™IRPKÖ>CpÀ]«F @¶÷>__MACOSX/Haxe Toolkit Installer Template/scripts/._haxe-postinstall.shUX‚IR$IRPKq>C4’Žp);: @ÿØ?Haxe Toolkit Installer Template/scripts/haxe-preinstall.shUX‚IR†IRPKq>CpÀ]«E @¶y@__MACOSX/Haxe Toolkit Installer Template/scripts/._haxe-preinstall.shUX‚IR†IRPKܹB‹´ÓJ\U; @ÿYAHaxe Toolkit Installer Template/scripts/neko-postinstall.shUX‚IR04 QPKܹBpÀ]«F @¶.B__MACOSX/Haxe Toolkit Installer Template/scripts/._neko-postinstall.shUX‚IR04 QPKì¸B%=p×!: @ÿCHaxe Toolkit Installer Template/scripts/neko-preinstall.shUX‚IRí QPK887¨Chaxe_4.2.4.orig/extra/release-checklist.txt0000644000175000017500000000271514146064214020661 0ustar andyandy00000000000000# Preparing related projects - Check that haxelib is working - Make sure to update the haxelib submodule - Check that the run-time haxelibs are ready for release: hxcpp, hxjava, hxcs - Check that the osx & windows installers has the latest neko release in "Makefile" and "Makefile.win" files # Making the release - Make sure CHANGES.txt has a proper date set! - Make sure `version` in globals.ml has the correct value - Update `version` in `./opam` - Check if the protocolVersion in displayJson.ml has to be updated - Make an empty GitHub release in https://github.com/HaxeFoundation/haxe/releases (do this first because we need the tag for the builds) - Wait for the CI to build (check https://build.haxe.org/builds/haxe/) - Get https://github.com/simn/hxgithub - Store your GitHub personal access token in .github-token - Run something like this: `neko release.n -h 4.0.0-rc.1 -u -uw -ur -d haxe_2019-02-01_development_1fdd3d5.zip --dry` - Tell yourself that you're gonna fix `-doc` generation next time - Write the announcement to `./haxe-version/RELEASE.md` - If everything was working, run the command again without `--dry` (and probably without the `-d`) - Update https://github.com/HaxeFoundation/haxe.org/blob/staging/downloads/versions.json # Cleanup - Remove issues with released fixes from the "Hotfix" milestone: https://github.com/HaxeFoundation/haxe/milestone/18 # Announcing the release - Find someone to announce the release on our various communication channelshaxe_4.2.4.orig/extra/release.neko0000644000175000017500000000413414146064214017024 0ustar andyandy00000000000000version = $loader.args[0]; if( version == null ) $throw(" argument required"); sys = $loader.loadprim("std@sys_string",0)(); binext = ""; curdir = "./"; ext = switch( sys ) { "Windows" => { curdir = ".\\"; binext = ".exe"; "-win" } "Mac" => "-osx" "Linux" => "-linux" "BSD" => "-bsd" default => $throw("Unknown system") } rights = 493; // octal 755 _mkdir = $loader.loadprim("std@sys_create_dir",2); mkdir = function(d) { _mkdir(d,rights); } chdir = $loader.loadprim("std@set_cwd",1); _cmd = $loader.loadprim("std@sys_command",1); cmd = function(c) { if( _cmd(c) != 0 ) $throw("Command '"+c+"' failed"); } dir = "haxe-"+version+ext; cmd("rm -rf "+dir); mkdir(dir); mkdir(dir+"/doc"); if( sys == "Windows" ) { cmd("cp ../haxe.exe ../haxesetup.exe haxeserver.bat "+dir); // copy if available (means we build on recent OCaml/MSVC) try cmd("cp C:/Windows/System32/msvcr100.dll "+dir) catch e {}; } else cmd("cp ../haxe "+dir); cmd("cp -pR CHANGES.txt LICENSE.txt ../std "+dir); if( sys == "Windows" ) cmd("chmod -R 777 "+dir); cmd("haxe all.hxml"); chdir(dir+"/std/tools"); // BUILD TOOLS chdir("haxedoc"); cmd("haxe haxedoc.hxml"); cmd(curdir+"haxedoc -v \"../../../../neko.xml;neko\" \"../../../../js.xml;js\" \"../../../../flash9.xml;flash\" \"../../../../php.xml;php\" \"../../../../cpp.xml;cpp\""); cmd("mv index.html content ../../../doc"); cmd("mv haxedoc"+binext+" ../../.."); chdir(".."); chdir("haxelib"); cmd("haxe haxelib.hxml"); cmd("mv haxelib"+binext+" ../../.."); chdir(".."); // CLEANUP chdir(".."); cmd("rm -rf .svn */.svn */*/.svn */*/*/.svn */*/*/*/.svn"); cmd("rm -rf all.n all.js *.swf *.xml"); chdir("tools"); chdir("haxedoc"); cmd("rm -rf haxedoc.n index.html content haxedoc"+binext); chdir(".."); chdir("haxelib"); cmd("rm -rf *.bat *.zip *.db *.n tmp files"); chdir(".."); chdir("hxinst"); cmd("rm -rf *.n *.zip *.dmg *.app hxinst-win.exe hxinst-linux hxinst-osx"); chdir(".."); chdir(".."); cmd("rm -rf mt mtwin"); chdir("../.."); // PACKAGE if( sys == "Windows" ) cmd("7z a -tzip "+dir+".zip "+dir); else cmd("tar -czf "+dir+".tar.gz "+dir); cmd("rm -rf "+dir); haxe_4.2.4.orig/libs/Makefile0000644000175000017500000000101614146064214015770 0ustar andyandy00000000000000OCAMLOPT = ocamlopt OCAMLC = ocamlc TARGET_FLAG = all LIBS=extlib-leftovers extc neko javalib ilib swflib ttflib objsize pcre ziplib all: $(LIBS) $(LIBS): $(MAKE) -C $@ OCAMLOPT=$(OCAMLOPT) OCAMLC=$(OCAMLC) $(TARGET_FLAG) clean: $(MAKE) -C extlib-leftovers clean $(MAKE) -C extc clean $(MAKE) -C neko clean $(MAKE) -C javalib clean $(MAKE) -C ilib clean $(MAKE) -C swflib clean $(MAKE) -C ttflib clean $(MAKE) -C objsize clean $(MAKE) -C pcre clean $(MAKE) -C ziplib clean .PHONY: all clean $(LIBS) Makefile: ; haxe_4.2.4.orig/libs/extc/LICENSE0000644000175000017500000004325314146064214016311 0ustar andyandy00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.haxe_4.2.4.orig/libs/extc/Makefile0000644000175000017500000000166214146064214016742 0ustar andyandy00000000000000ALL_CFLAGS = $(CFLAGS) OCAMLOPT=ocamlopt OCAMLC=ocamlc SRC = extc.ml process.ml extc_stubs.c process_stubs.c all: bytecode native bytecode: extc.cma native: extc.cmxa extc.cma: extc_stubs.o process_stubs.o extc.ml process.ml ocamlfind $(OCAMLC) -safe-string -a -o extc.cma -package extlib extc.ml process.ml extc.cmxa: extc.ml process.ml extc_stubs.o process_stubs.o ocamlfind $(OCAMLOPT) -safe-string -a -o extc.cmxa -package extlib extc.ml process.ml extc_stubs.o: extc_stubs.c ocamlfind $(OCAMLC) -safe-string $(ALL_CFLAGS) extc_stubs.c process_stubs.o: process_stubs.c ocamlfind $(OCAMLC) -safe-string $(ALL_CFLAGS) process_stubs.c clean: rm -f extc.cma extc.cmi extc.cmx extc.cmxa extc.o extc.obj extc.lib extc_stubs.obj extc_stubs.o process.cmx process.obj process.cmi process.o process_stubs.obj process_stubs.o rm -f extc.a libextc.a libextc.lib extc.cmo process.cmo .PHONY: all bytecode native clean Makefile: ; $(SRC): ; haxe_4.2.4.orig/libs/extc/dune0000644000175000017500000000032114146064214016147 0ustar andyandy00000000000000(include_subdirs no) (library (name extc) (libraries extlib) (c_names extc_stubs) (modules extc) (wrapped false) ) (library (name extproc) (c_names process_stubs) (modules process) (wrapped false) )haxe_4.2.4.orig/libs/extc/extc.ml0000644000175000017500000001277314146064214016604 0ustar andyandy00000000000000(* * Extc : C common OCaml bindings * Copyright (c)2004 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type zstream type zflush = | Z_NO_FLUSH | Z_PARTIAL_FLUSH | Z_SYNC_FLUSH | Z_FULL_FLUSH | Z_FINISH type zresult = { z_finish : bool; z_read : int; z_wrote : int; } external zlib_deflate_init2 : int -> int -> zstream = "zlib_deflate_init2" external zlib_deflate : zstream -> src:string -> spos:int -> slen:int -> dst:bytes -> dpos:int -> dlen:int -> zflush -> zresult = "zlib_deflate_bytecode" "zlib_deflate" external zlib_deflate_end : zstream -> unit = "zlib_deflate_end" external zlib_inflate_init2 : int -> zstream = "zlib_inflate_init" external zlib_inflate : zstream -> src:string -> spos:int -> slen:int -> dst:bytes -> dpos:int -> dlen:int -> zflush -> zresult = "zlib_inflate_bytecode" "zlib_inflate" external zlib_inflate_end : zstream -> unit = "zlib_inflate_end" external _executable_path : string -> string = "executable_path" external get_full_path : string -> string = "get_full_path" external get_real_path : string -> string = "get_real_path" external zlib_deflate_bound : zstream -> int -> int = "zlib_deflate_bound" external zlib_crc32 : bytes -> int -> int32 = "zlib_crc32" external time : unit -> float = "sys_time" external getch : bool -> int = "sys_getch" external filetime : string -> float = "sys_filetime" (* support for backward compatibility *) let zlib_deflate_init lvl = zlib_deflate_init2 lvl 15 let zlib_inflate_init() = zlib_inflate_init2 15 let executable_path() = let p = _executable_path Sys.argv.(0) in let p1 = (try String.rindex p '/' with Not_found -> String.length p + 1) in let p2 = (try String.rindex p '\\' with Not_found -> String.length p + 1) in match min p1 p2 with | x when x = String.length p + 1 -> "" | pos -> String.sub p 0 pos ^ "/" let zlib_op op z str = let bufsize = 1 lsl 14 in let tmp = Bytes.create bufsize in let total = ref 0 in let rec loop pos len acc = let r = op z ~src:str ~spos:pos ~slen:len ~dst:tmp ~dpos:0 ~dlen:bufsize (if len = 0 then Z_FINISH else Z_SYNC_FLUSH) in total := !total + r.z_wrote; let acc = Bytes.sub tmp 0 r.z_wrote :: acc in if r.z_finish then acc else loop (pos + r.z_read) (len - r.z_read) acc in let strings = loop 0 (String.length str) [] in let big = Bytes.create !total in ignore(List.fold_left (fun p s -> let l = Bytes.length s in let p = p - l in Bytes.unsafe_blit s 0 big p l; p ) !total strings); Bytes.unsafe_to_string big let zip str = let z = zlib_deflate_init 9 in let s = zlib_op zlib_deflate z str in zlib_deflate_end z; s let unzip str = let z = zlib_inflate_init() in let s = zlib_op zlib_inflate z str in zlib_inflate_end z; s let input_zip ?(bufsize=65536) ch = let tmp_out = Bytes.create bufsize in let tmp_in = Bytes.create bufsize in let tmp_buf = Buffer.create bufsize in let buf = ref "" in let p = ref 0 in let z = zlib_inflate_init() in let rec fill_buffer() = let rec loop pos len = if len > 0 || pos = 0 then begin let r = zlib_inflate z (Bytes.unsafe_to_string tmp_in) pos len tmp_out 0 bufsize (if pos = 0 && len = 0 then Z_FINISH else Z_SYNC_FLUSH) in Buffer.add_subbytes tmp_buf tmp_out 0 r.z_wrote; loop (pos + r.z_read) (len - r.z_read); end in loop 0 (IO.input ch tmp_in 0 bufsize); p := 0; buf := Buffer.contents tmp_buf; Buffer.clear tmp_buf; in let read() = if !p = String.length !buf then fill_buffer(); let c = String.unsafe_get !buf !p in incr p; c in let rec input str pos len = let b = String.length !buf - !p in if b >= len then begin String.blit !buf !p str pos len; p := !p + len; len; end else begin String.blit !buf !p str pos b; fill_buffer(); if !p = String.length !buf then b else b + input str (pos + b) (len - b) end; in let close() = zlib_inflate_end z in IO.create_in ~read ~input ~close let output_zip ?(bufsize=65536) ?(level=9) ch = let z = zlib_deflate_init level in let out = Bytes.create bufsize in let tmp_out = Bytes.create bufsize in let p = ref 0 in let rec flush finish = let r = zlib_deflate z (Bytes.unsafe_to_string out) 0 !p tmp_out 0 bufsize (if finish then Z_FINISH else Z_SYNC_FLUSH) in ignore(IO.really_output ch tmp_out 0 r.z_wrote); let remain = !p - r.z_read in Bytes.blit out r.z_read out 0 remain; p := remain; if finish && not r.z_finish then flush true in let write c = if !p = bufsize then flush false; Bytes.unsafe_set out !p c; incr p in let rec output str pos len = let b = bufsize - !p in if len <= b then begin Bytes.blit str pos out !p len; p := !p + len; len end else begin Bytes.blit str pos out !p b; p := !p + b; flush false; b + output str (pos + b) (len - b); end; in let close() = flush true; zlib_deflate_end z in IO.create_out ~write ~output ~flush:(fun() -> flush false; IO.flush ch) ~close haxe_4.2.4.orig/libs/extc/extc_stubs.c0000644000175000017500000004157714146064214017642 0ustar andyandy00000000000000/* * Extc : C common OCaml bindings * Copyright (c)2004-2017 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #include #include #include #include #include #ifdef _WIN32 # include # include #else # include # include # include # include # include # include # include # include # include # include # include #endif #ifdef __APPLE__ # include # include # include #include #include #endif #ifdef __FreeBSD__ # include # include # include #endif #ifndef CLK_TCK # define CLK_TCK 100 #endif /** * Converts an OCaml value to a C pointer for a z_stream. * * @param v {value} An OCaml value * @return {z_streamp} A pointer for a z_stream */ #define ZStreamP_val(v) (*((z_streamp *) Data_custom_val(v))) /** * Converts an OCaml `Extc.zflush` value to an allowed flush value for _zlib_. * * It may raise the following OCaml exception: * - Failure: Unknown zflush value. * * Make sure to update this function when refactoring OCaml's `Extc.zflush` type. The integer value * of OCaml's `Extc.zflush` is the 0-based index of the position of the constructor in the type * definition. * * See: * https://github.com/HaxeFoundation/haxe-debian/blob/31cb4aaab9f6770d058883a1c5b97e36c8ec5d71/libs/extc/extc.ml#L22 * https://github.com/madler/zlib/blob/cacf7f1d4e3d44d871b605da3b647f07d718623f/zlib.h#L168 * * @param zflush_val {value} OCaml `Extc.zflush` * @return {int} C int representing an allowed flush value for _zlib_ */ int Zflush_val(value zflush_val) { switch (Int_val(zflush_val)) { case 0: return Z_NO_FLUSH; case 1: return Z_PARTIAL_FLUSH; case 2: return Z_SYNC_FLUSH; case 3: return Z_FULL_FLUSH; case 4: return Z_FINISH; // TODO: support Z_BLOCK and Z_TREE // TODO: append the received value default: failwith("Error in `Zflush_val` (extc_stubs.c): Unknown zflush value"); } assert(0); } /** * Converts an allowed flush value for _zlib_ to an OCaml `Extc.zflush` value. * * Make sure to update this function when refactoring OCaml's `Extc.zflush` type. The integer value * of OCaml's `Extc.zflush` is the 0-based index of the position of the constructor in the type * definition. * * See: * https://github.com/madler/zlib/blob/cacf7f1d4e3d44d871b605da3b647f07d718623f/zlib.h#L168 * https://github.com/HaxeFoundation/haxe-debian/blob/31cb4aaab9f6770d058883a1c5b97e36c8ec5d71/libs/extc/extc.ml#L22 * * @param {int} C int representing an allowed flush value for _zlib_ * @return {value} OCaml `Extc.zflush` */ value val_Zflush(int zflush) { switch (zflush) { case Z_NO_FLUSH: return Val_int(0); case Z_PARTIAL_FLUSH: return Val_int(1); case Z_SYNC_FLUSH: return Val_int(2); case Z_FULL_FLUSH: return Val_int(3); case Z_FINISH: return Val_int(4); // TODO: support Z_BLOCK and Z_TREE } assert(0); } /** * Free the memory of the pointer contained in the supplied OCaml value `caml_z_stream_pointer`. * * @param z_streamp_val {value} An OCaml value containing a z_stream pointer to the memory to free. */ void zlib_free_stream(value z_streamp_val) { caml_stat_free(ZStreamP_val(z_streamp_val)); ZStreamP_val(z_streamp_val) = NULL; } /** * Define the custom operations for a z_stream. This ensures that the memory owned * by the z_stream pointer is freed. * * See: * https://github.com/ocaml/ocaml/blob/70d880a41a82aae1ebd428fd38100e8467f8535a/byterun/caml/custom.h#L25 */ static struct custom_operations zlib_stream_ops = { // identifier "z_stream_ops", // finalize &zlib_free_stream, // compare NULL, // hash NULL, // serialize NULL, // compare_ext NULL }; /** * Create an OCaml value containing a new z_stream pointer. * * This function may raise the following OCaml exception: * - Out_of_memory exception * * @return {value} An OCaml value containing a new z_stream pointer. */ value zlib_new_stream() { value z_streamp_val = caml_alloc_custom(&zlib_stream_ops, sizeof(z_streamp), 0, 1); ZStreamP_val(z_streamp_val) = caml_stat_alloc(sizeof(z_stream)); ZStreamP_val(z_streamp_val)->zalloc = NULL; ZStreamP_val(z_streamp_val)->zfree = NULL; ZStreamP_val(z_streamp_val)->opaque = NULL; ZStreamP_val(z_streamp_val)->next_in = NULL; ZStreamP_val(z_streamp_val)->next_out = NULL; return z_streamp_val; } /** * OCaml binding for _zlib_'s `deflateInit2` function. * * This creates a new stream and initializes it for deflate. * * This function may raise the following OCaml exceptions: * - Out_of_memory exception * - Failure exception: Invalid parameters * - Failure exception: Invalid version * - Failure exception: Unknown zlib return code * * See: * https://github.com/madler/zlib/blob/cacf7f1d4e3d44d871b605da3b647f07d718623f/zlib.h#L538 * * @param levelVal {value} OCaml `int`: the compression level, must be in the range 0..9. * 0 gives no compression at all, 1 the best speed, 9 the best compression. * @param windowBitsVal {value} OCaml `int`: base two logarithm of the window size (size of the * history buffer) used by _zlib_. It should be in the range 9..15 for this version of _zlib_. * It can also be in the range -15..-8 (the absolute value is used) for raw deflate. * Finally, it can be greater than 15 for gzip encoding. See _zlib_'s documentation for * `deflateInit2` for the exact documentation. * @return {value} An OCaml value representing the new stream, initialized for deflate. */ CAMLprim value zlib_deflate_init2(value level_val, value window_bits_val) { int level = Int_val(level_val); int window_bits = Int_val(window_bits_val); value z_streamp_val = zlib_new_stream(); z_streamp stream = ZStreamP_val(z_streamp_val); int deflate_init2_result = deflateInit2( stream, level, Z_DEFLATED, // method window_bits, 8, // memLevel Z_DEFAULT_STRATEGY // strategy ); if (deflate_init2_result == Z_OK) { return z_streamp_val; } switch (deflate_init2_result) { case Z_MEM_ERROR: caml_raise_out_of_memory(); break; case Z_STREAM_ERROR: // TODO: use stream->msg to get _zlib_'s text message failwith("Error in `zlib_deflate_init2` (extc_stubs.c): call to `deflateInit2` failed: Z_STREAM_ERROR"); break; case Z_VERSION_ERROR: // TODO: use stream->msg to get _zlib_'s text message failwith("Error in `zlib_deflate_init2` (extc_stubs.c): call to `deflateInit2` failed: Z_VERSION_ERROR"); break; default: failwith("Error in `zlib_deflate_init2` (extc_stubs.c): unknown return code from `deflateInit2`"); } assert(0); } /** * OCaml binding for _zlib_'s `deflate` function. * * Compresses as much data as possible, and stops when the input buffer becomes empty or the output * buffer becomes full. * * This function may raise the following OCaml exceptions: * - Out_of_memory exception * - Failure exception: Invalid parameters * - Failure exception: Invalid version * - Failure exception: Unknown zlib return code * * See: * https://github.com/madler/zlib/blob/cacf7f1d4e3d44d871b605da3b647f07d718623f/zlib.h#L250 * * @param stream_val {value} OCaml `Extc.zstream`: value containing a z_stream pointer to a deflate * stream. * @param src {value} OCaml `bytes`: Source buffer * @param spos {value} OCaml `int`: Index of the inclusive start offset of the source. * @param slen {value} OCaml `int`: Length of the data to read from the source buffer, from spos. * @param dst {value} OCaml `bytes`: Source buffer * @param dpos {value} OCaml `int`: Index of the inclusive start offset of the source. * @param dlen {value} OCaml `int`: Length of the data to read from the source buffer, from spos. * @param flush_val {value} OCaml `Extc.zflush`: Controls the flush logic. See _zlib_'s * documentation. * @return {value} OCaml `Extc.reslut`. */ CAMLprim value zlib_deflate(value stream_val, value src, value spos, value slen, value dst, value dpos, value dlen, value flush_val) { z_streamp stream = ZStreamP_val(stream_val); int flush = Zflush_val(flush_val); stream->next_in = (Bytef*)(String_val(src) + Int_val(spos)); stream->next_out = (Bytef*)(String_val(dst) + Int_val(dpos)); stream->avail_in = Int_val(slen); stream->avail_out = Int_val(dlen); int deflate_result = deflate(stream, flush); if (deflate_result == Z_OK || deflate_result == Z_STREAM_END) { stream->next_in = NULL; stream->next_out = NULL; value zresult = alloc_small(3, 0); // z_finish Field(zresult, 0) = Val_bool(deflate_result == Z_STREAM_END); // z_read Field(zresult, 1) = Val_int(Int_val(slen) - stream->avail_in); // z_wrote Field(zresult, 2) = Val_int(Int_val(dlen) - stream->avail_out); return zresult; } switch (deflate_result) { case Z_MEM_ERROR: caml_raise_out_of_memory(); break; case Z_STREAM_ERROR: // TODO: use stream->msg to get _zlib_'s text message failwith("Error in `zlib_deflate` (extc_stubs.c): call to `deflate` failed: Z_STREAM_ERROR"); break; case Z_BUF_ERROR: // TODO: use stream->msg to get _zlib_'s text message failwith("Error in `zlib_deflate` (extc_stubs.c): call to `deflate` failed: Z_BUF_ERROR"); break; default: failwith("Error in `zlib_deflate` (extc_stubs.c): unknown return code from `deflate`"); } assert(0); } CAMLprim value zlib_deflate_bytecode(value *arg, int nargs) { return zlib_deflate(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7]); } CAMLprim value zlib_deflate_end(value zv) { if( deflateEnd(ZStreamP_val(zv)) != 0 ) failwith("zlib_deflate_end"); return Val_unit; } CAMLprim value zlib_inflate_init(value wbits) { value z = zlib_new_stream(); if( inflateInit2(ZStreamP_val(z),Int_val(wbits)) != Z_OK ) failwith("zlib_inflate_init"); return z; } CAMLprim value zlib_inflate( value zv, value src, value spos, value slen, value dst, value dpos, value dlen, value flush ) { z_streamp z = ZStreamP_val(zv); value res; int r; z->next_in = (Bytef*)(String_val(src) + Int_val(spos)); z->next_out = (Bytef*)(String_val(dst) + Int_val(dpos)); z->avail_in = Int_val(slen); z->avail_out = Int_val(dlen); if( (r = inflate(z,Int_val(flush))) < 0 ) failwith("zlib_inflate"); z->next_in = NULL; z->next_out = NULL; res = alloc_small(3, 0); Field(res, 0) = Val_bool(r == Z_STREAM_END); Field(res, 1) = Val_int(Int_val(slen) - z->avail_in); Field(res, 2) = Val_int(Int_val(dlen) - z->avail_out); return res; } CAMLprim value zlib_inflate_bytecode(value * arg, int nargs) { return zlib_inflate(arg[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],arg[7]); } CAMLprim value zlib_inflate_end(value zv) { if( inflateEnd(ZStreamP_val(zv)) != 0 ) failwith("zlib_inflate_end"); return Val_unit; } CAMLprim value zlib_deflate_bound(value zv,value len) { return Val_int(deflateBound(ZStreamP_val(zv),Int_val(len))); } CAMLprim value zlib_crc32( value src, value len ) { CAMLparam2(src,len); CAMLlocal1(result); uLong crc = crc32(0L, (Bytef*)(String_val(src)), Int_val(len)); result = caml_copy_int32(crc); CAMLreturn(result); } CAMLprim value executable_path(value u) { #ifdef _WIN32 char path[MAX_PATH]; if( GetModuleFileName(NULL,path,MAX_PATH) == 0 ) failwith("executable_path"); return caml_copy_string(path); #elif __APPLE__ char path[MAXPATHLEN+1]; uint32_t path_len = MAXPATHLEN; if ( _NSGetExecutablePath(path, &path_len) ) failwith("executable_path"); return caml_copy_string(path); #elif __FreeBSD__ char path[PATH_MAX]; int error, name[4]; size_t len; name[0] = CTL_KERN; name[1] = KERN_PROC; name[2] = KERN_PROC_PATHNAME; name[3] = (int)getpid(); len = sizeof(path); error = sysctl(name, 4, path, &len, NULL, 0); if( error < 0 ) failwith("executable_path"); return caml_copy_string(path); #else char path[PATH_MAX]; int length = readlink("/proc/self/exe", path, sizeof(path)); if( length < 0 || length >= PATH_MAX ) { const char *p = getenv("_"); if( p != NULL ) return caml_copy_string(p); else failwith("executable_path"); } path[length] = '\0'; return caml_copy_string(path); #endif } CAMLprim value get_full_path( value f ) { #ifdef _WIN32 char path[MAX_PATH]; if( GetFullPathName(String_val(f),MAX_PATH,path,NULL) == 0 ) failwith("get_full_path"); return caml_copy_string(path); #else char path[4096]; if( realpath(String_val(f),path) == NULL ) failwith("get_full_path"); return caml_copy_string(path); #endif } CAMLprim value get_real_path( value path ) { #ifdef _WIN32 const char sep = '\\'; size_t len, i, last; WIN32_FIND_DATA data; HANDLE handle; char out[MAX_PATH]; // this will ensure the full class path with proper casing if( GetFullPathName(String_val(path),MAX_PATH,out,NULL) == 0 ) failwith("get_real_path"); len = strlen(out); i = 0; if (len >= 2 && out[1] == ':') { // convert drive letter to uppercase if (out[0] >= 'a' && out[0] <= 'z') out[0] += 'A' - 'a'; if (len >= 3 && out[2] == sep) i = 3; else i = 2; } last = i; while (i < len) { // skip until separator while (i < len && out[i] != sep) i++; // temporarily strip string to last found component out[i] = 0; // get actual file/dir name with proper case if ((handle = FindFirstFile(out, &data)) != INVALID_HANDLE_VALUE) { int klen = strlen(data.cFileName); // a ~ was expanded ! if( klen != i - last ) { int d = klen - (i - last); memmove(out + i + d, out + i, len - i + 1); len += d; i += d; } // replace the component with proper case memcpy(out + last, data.cFileName, klen + 1); FindClose(handle); } // if we're not at the end, restore the path if (i < len) out[i] = sep; // advance i++; last = i; } return caml_copy_string(out); #else return path; #endif } #ifndef _WIN32 #define TimeSpecToSeconds(ts) (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0 #endif CAMLprim value sys_time() { #ifdef _WIN32 #define EPOCH_DIFF (134774*24*60*60.0) static LARGE_INTEGER freq; static int freq_init = -1; LARGE_INTEGER counter; if( freq_init == -1 ) freq_init = QueryPerformanceFrequency(&freq); if( !freq_init || !QueryPerformanceCounter(&counter) ) { SYSTEMTIME t; FILETIME ft; ULARGE_INTEGER ui; GetSystemTime(&t); if( !SystemTimeToFileTime(&t,&ft) ) failwith("sys_cpu_time"); ui.LowPart = ft.dwLowDateTime; ui.HighPart = ft.dwHighDateTime; return caml_copy_double( ((double)ui.QuadPart) / 10000000.0 - EPOCH_DIFF ); } return caml_copy_double( ((double)counter.QuadPart) / ((double)freq.QuadPart) ); #elif __APPLE__ uint64_t time; uint64_t elapsedNano; static mach_timebase_info_data_t sTimebaseInfo; time = mach_absolute_time(); if ( sTimebaseInfo.denom == 0 ) { (void) mach_timebase_info(&sTimebaseInfo); } elapsedNano = time * sTimebaseInfo.numer / sTimebaseInfo.denom; return caml_copy_double(time / 1000000000.0); #elif defined CLOCK_MONOTONIC_RAW struct timespec t; clock_gettime(CLOCK_MONOTONIC_RAW, &t); return caml_copy_double(TimeSpecToSeconds(t)); #else struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); return caml_copy_double(TimeSpecToSeconds(t)); #endif } CAMLprim value sys_getch( value b ) { # ifdef _WIN32 return Val_int( Bool_val(b)?getche():getch() ); # else // took some time to figure out how to do that // without relying on ncurses, which clear the // terminal on initscr() int c; struct termios term, old; tcgetattr(fileno(stdin), &old); term = old; cfmakeraw(&term); tcsetattr(fileno(stdin), 0, &term); c = getchar(); tcsetattr(fileno(stdin), 0, &old); if( Bool_val(b) ) fputc(c,stdout); return Val_int(c); # endif } CAMLprim value sys_filetime( value file ) { # ifdef _WIN32 FILETIME fp; ULARGE_INTEGER ui; HANDLE h = CreateFile(String_val(file),FILE_READ_ATTRIBUTES,FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); if( h == INVALID_HANDLE_VALUE || !GetFileTime(h,NULL,NULL,&fp) ) { CloseHandle(h); return caml_copy_double(0.); } CloseHandle(h); ui.LowPart = fp.dwLowDateTime; ui.HighPart = fp.dwHighDateTime; return caml_copy_double( ((double)ui.QuadPart) / 10000000.0 - EPOCH_DIFF ); # else struct stat sbuf; if( stat(String_val(file),&sbuf) < 0 ) return caml_copy_double(0.); return caml_copy_double( sbuf.st_mtime ); # endif }haxe_4.2.4.orig/libs/extc/process.ml0000644000175000017500000000261414146064214017310 0ustar andyandy00000000000000(* * Extc : C common OCaml bindings * Copyright (c)2004-2015 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type process external run : string -> string array option -> process = "process_run" external read_stdout : process -> string -> int -> int -> int = "process_stdout_read" external read_stderr : process -> string -> int -> int -> int = "process_stderr_read" external write_stdin : process -> string -> int -> int -> int = "process_stdin_write" external close_stdin : process -> unit = "process_stdin_close" external exit : process -> int = "process_exit" external pid : process -> int = "process_pid" external close : process -> unit = "process_close" external kill : process -> unit = "process_kill" haxe_4.2.4.orig/libs/extc/process_stubs.c0000644000175000017500000003433514146064214020347 0ustar andyandy00000000000000/* * Copyright (C)2005-2015 Haxe Foundation * * 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. */ // ported from NekoVM #include #include #include #include #include #include #ifdef _WIN32 # include #else # include # include # include # include # include # ifndef __APPLE__ # if defined(__FreeBSD__) || defined(__DragonFly__) # include # else # include # endif # endif #endif #ifdef _WIN32 # define POSIX_LABEL(name) # define HANDLE_EINTR(label) # define HANDLE_FINTR(f,label) #else # include # define POSIX_LABEL(name) name: # define HANDLE_EINTR(label) if( errno == EINTR ) goto label # define HANDLE_FINTR(f,label) if( ferror(f) && errno == EINTR ) goto label #endif // --- neko-to-caml api -- #define val_data(v) v #define val_array_size(v) Wosize_val(v) #define val_array_ptr(v) (&Field(v,0)) #define val_string(v) String_val(v) #define val_strlen(v) caml_string_length(v) #define alloc_int(i) Val_int(i) #define val_null Val_int(0) #define val_some(v) Field(v,0) #define val_int(v) Int_val(v) #define neko_error() failwith(__FUNCTION__) static value alloc_private( int size ) { return alloc((size + sizeof(value) - 1) / sizeof(value), Abstract_tag); } // --- buffer api #define EXTERN typedef struct _stringitem { char *str; int size; int len; struct _stringitem *next; } * stringitem; struct _buffer { int totlen; int blen; stringitem data; }; typedef struct _buffer *buffer; static void buffer_append_new( buffer b, const char *s, int len ) { int size; stringitem it; while( b->totlen >= (b->blen << 2) ) b->blen <<= 1; size = (len < b->blen)?b->blen:len; it = (stringitem)malloc(sizeof(struct _stringitem)); it->str = (char*)malloc(size); memcpy(it->str,s,len); it->size = size; it->len = len; it->next = b->data; b->data = it; } EXTERN void buffer_append_sub( buffer b, const char *s, int len ) { stringitem it; if( s == NULL || len <= 0 ) return; b->totlen += len; it = b->data; if( it ) { int free = it->size - it->len; if( free >= len ) { memcpy(it->str + it->len,s,len); it->len += len; return; } else { memcpy(it->str + it->len,s,free); it->len += free; s += free; len -= free; } } buffer_append_new(b,s,len); } EXTERN void buffer_append_str( buffer b, const char *s ) { if( s == NULL ) return; buffer_append_sub(b,s,strlen(s)); } EXTERN buffer alloc_buffer( const char *init ) { buffer b = (buffer)malloc(sizeof(struct _buffer)); b->totlen = 0; b->blen = 16; b->data = NULL; if( init ) buffer_append_str(b,init); return b; } EXTERN void buffer_append_char( buffer b, char c ) { stringitem it; b->totlen++; it = b->data; if( it && it->len != it->size ) { it->str[it->len++] = c; return; } buffer_append_new(b,&c,1); } EXTERN char *buffer_to_string( buffer b ) { char *v = (char*)malloc(b->totlen + 1); stringitem it = b->data; char *s = v + b->totlen; *s = 0; while( it != NULL ) { stringitem tmp; s -= it->len; memcpy(s,it->str,it->len); tmp = it->next; free(it->str); free(it); it = tmp; } free(b); return v; } EXTERN int buffer_length( buffer b ) { return b->totlen; } // --------------- #include #include typedef struct { #ifdef _WIN32 HANDLE oread; HANDLE eread; HANDLE iwrite; PROCESS_INFORMATION pinf; #else int oread; int eread; int iwrite; int pid; #endif } vprocess; #define val_process(v) (*((vprocess**) Data_custom_val(v))) /**

Process

An API for starting and communication with sub processes.

**/ #ifndef _WIN32 static int do_close( int fd ) { POSIX_LABEL(close_again); if( close(fd) != 0 ) { HANDLE_EINTR(close_again); return 1; } return 0; } #endif static void free_process( value vp ) { vprocess *p = val_process(vp); if (p == NULL) { return; } # ifdef _WIN32 CloseHandle(p->eread); CloseHandle(p->oread); CloseHandle(p->iwrite); CloseHandle(p->pinf.hProcess); CloseHandle(p->pinf.hThread); # else do_close(p->eread); do_close(p->oread); do_close(p->iwrite); # endif free(p); } static struct custom_operations vprocess_ops = { .identifier = "vprocess_ops", .finalize = custom_finalize_default, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; /** process_run : cmd:string -> args:string array option -> 'process Start a process using a command and the specified arguments. When args is not null, cmd and args will be auto-quoted/escaped. If no auto-quoting/escaping is desired, you should append necessary arguments to cmd as if it is inputted to the shell directly, and pass null as args. **/ CAMLprim value process_run( value cmd, value vargs ) { CAMLparam2(cmd, vargs); CAMLlocal1(vp); int i, isRaw; vprocess *p; vp = caml_alloc_custom(&vprocess_ops, sizeof(vprocess*), 0, 1); isRaw = vargs == val_null; if (!isRaw) { vargs = val_some(vargs); } # ifdef _WIN32 { SECURITY_ATTRIBUTES sattr; STARTUPINFO sinf; HANDLE proc = GetCurrentProcess(); HANDLE oread,eread,iwrite; // creates commandline buffer b = alloc_buffer(NULL); char *sargs; if (isRaw) { char* cmdexe; buffer_append_char(b,'"'); cmdexe = getenv("COMSPEC"); if (!cmdexe) cmdexe = "cmd.exe"; buffer_append_str(b,cmdexe); buffer_append_char(b,'"'); buffer_append_str(b,"/C \""); buffer_append_str(b,val_string(cmd)); buffer_append_char(b,'"'); } else { buffer_append_char(b,'"'); buffer_append_str(b,val_string(cmd)); buffer_append_char(b,'"'); for(i=0;ioread,0,FALSE,DUPLICATE_SAME_ACCESS); DuplicateHandle(proc,eread,proc,&p->eread,0,FALSE,DUPLICATE_SAME_ACCESS); DuplicateHandle(proc,iwrite,proc,&p->iwrite,0,FALSE,DUPLICATE_SAME_ACCESS); CloseHandle(oread); CloseHandle(eread); CloseHandle(iwrite); if( !CreateProcess(NULL,val_string(sargs),NULL,NULL,TRUE,0,NULL,NULL,&sinf,&p->pinf) ) { CloseHandle(p->eread); CloseHandle(p->oread); CloseHandle(p->iwrite); free(sargs); neko_error(); } free(sargs); // close unused pipes CloseHandle(sinf.hStdOutput); CloseHandle(sinf.hStdError); CloseHandle(sinf.hStdInput); } # else char **argv; if (isRaw) { argv = (char**)alloc_private(sizeof(char*)*4); argv[0] = "/bin/sh"; argv[1] = "-c"; argv[2] = val_string(cmd); argv[3] = NULL; } else { argv = (char**)alloc_private(sizeof(char*)*(val_array_size(vargs)+2)); argv[0] = val_string(cmd); for(i=0;ipid = fork(); if( p->pid == -1 ) { do_close(input[0]); do_close(input[1]); do_close(output[0]); do_close(output[1]); do_close(error[0]); do_close(error[1]); neko_error(); } // child if( p->pid == 0 ) { close(input[1]); close(output[0]); close(error[0]); dup2(input[0],0); dup2(output[1],1); dup2(error[1],2); execvp(argv[0],argv); fprintf(stderr,"Command not found : %s\n",val_string(cmd)); exit(1); } // parent do_close(input[0]); do_close(output[1]); do_close(error[1]); p->iwrite = input[1]; p->oread = output[0]; p->eread = error[0]; # endif val_process(vp) = p; CAMLreturn(vp); } #define CHECK_ARGS() \ CAMLparam4(vp, str, pos, len); \ vprocess *p; \ if( val_int(pos) < 0 || val_int(len) < 0 || val_int(pos) + val_int(len) > val_strlen(str) ) \ neko_error(); \ p = val_process(vp); \ /** process_stdout_read : 'process -> buf:string -> pos:int -> len:int -> int Read up to [len] bytes in [buf] starting at [pos] from the process stdout. Returns the number of bytes read this way. Raise an exception if this process stdout is closed and no more data is available for reading. **/ CAMLprim value process_stdout_read( value vp, value str, value pos, value len ) { CHECK_ARGS(); # ifdef _WIN32 { DWORD nbytes; if( !ReadFile(p->oread,val_string(str)+val_int(pos),val_int(len),&nbytes,NULL) ) neko_error(); CAMLreturn(alloc_int(nbytes)); } # else int nbytes; POSIX_LABEL(stdout_read_again); nbytes = read(p->oread,val_string(str)+val_int(pos),val_int(len)); if( nbytes < 0 ) { HANDLE_EINTR(stdout_read_again); neko_error(); } if( nbytes == 0 ) neko_error(); CAMLreturn(alloc_int(nbytes)); # endif } /** process_stderr_read : 'process -> buf:string -> pos:int -> len:int -> int Read up to [len] bytes in [buf] starting at [pos] from the process stderr. Returns the number of bytes read this way. Raise an exception if this process stderr is closed and no more data is available for reading. **/ CAMLprim value process_stderr_read( value vp, value str, value pos, value len ) { CHECK_ARGS(); # ifdef _WIN32 { DWORD nbytes; if( !ReadFile(p->eread,val_string(str)+val_int(pos),val_int(len),&nbytes,NULL) ) neko_error(); CAMLreturn(alloc_int(nbytes)); } # else int nbytes; POSIX_LABEL(stderr_read_again); nbytes = read(p->eread,val_string(str)+val_int(pos),val_int(len)); if( nbytes < 0 ) { HANDLE_EINTR(stderr_read_again); neko_error(); } if( nbytes == 0 ) neko_error(); CAMLreturn(alloc_int(nbytes)); # endif } /** process_stdin_write : 'process -> buf:string -> pos:int -> len:int -> int Write up to [len] bytes from [buf] starting at [pos] to the process stdin. Returns the number of bytes writen this way. Raise an exception if this process stdin is closed. **/ CAMLprim value process_stdin_write( value vp, value str, value pos, value len ) { CHECK_ARGS(); # ifdef _WIN32 { DWORD nbytes; if( !WriteFile(p->iwrite,val_string(str)+val_int(pos),val_int(len),&nbytes,NULL) ) neko_error(); CAMLreturn(alloc_int(nbytes)); } # else int nbytes; POSIX_LABEL(stdin_write_again); nbytes = write(p->iwrite,val_string(str)+val_int(pos),val_int(len)); if( nbytes == -1 ) { HANDLE_EINTR(stdin_write_again); neko_error(); } CAMLreturn(alloc_int(nbytes)); # endif } /** process_stdin_close : 'process -> void Close the process standard input. **/ CAMLprim value process_stdin_close( value vp ) { CAMLparam1(vp); vprocess *p = val_process(vp); # ifdef _WIN32 if( !CloseHandle(p->iwrite) ) neko_error(); # else if( do_close(p->iwrite) ) neko_error(); p->iwrite = -1; # endif CAMLreturn(val_null); } /** process_exit : 'process -> int Wait until the process terminate, then returns its exit code. **/ CAMLprim value process_exit( value vp ) { CAMLparam1(vp); vprocess *p = val_process(vp); # ifdef _WIN32 { DWORD rval; WaitForSingleObject(p->pinf.hProcess,INFINITE); if( !GetExitCodeProcess(p->pinf.hProcess,&rval) ) neko_error(); CAMLreturn(alloc_int(rval)); } # else int rval; while( waitpid(p->pid,&rval,0) != p->pid ) { if( errno == EINTR ) continue; neko_error(); } if( !WIFEXITED(rval) ) neko_error(); CAMLreturn(alloc_int(WEXITSTATUS(rval))); # endif } /** process_pid : 'process -> int Returns the process id. **/ CAMLprim value process_pid( value vp ) { CAMLparam1(vp); vprocess *p = val_process(vp); # ifdef _WIN32 CAMLreturn(alloc_int(p->pinf.dwProcessId)); # else CAMLreturn(alloc_int(p->pid)); # endif } /** process_close : 'process -> void Close the process I/O. **/ CAMLprim value process_close( value vp ) { CAMLparam1(vp); free_process(vp); //val_kind(vp) = NULL; CAMLreturn(val_null); } /** process_kill : 'process -> void Terminates a running process. **/ CAMLprim value process_kill( value vp ) { CAMLparam1(vp); # ifdef _WIN32 TerminateProcess(val_process(vp)->pinf.hProcess,-1); # else kill(val_process(vp)->pid,9); # endif CAMLreturn(val_null); } /* ************************************************************************ */ haxe_4.2.4.orig/libs/extc/test.ml0000644000175000017500000000345314146064214016613 0ustar andyandy00000000000000(* * Extc : C common OCaml bindings * Copyright (c)2004 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) if Array.length Sys.argv > 1 then begin print_string Sys.argv.(1); flush stdout; prerr_string "ERROR"; flush stderr; let input = Std.input_all stdin in print_string input; exit 66; end; prerr_endline "Start"; prerr_endline (Extc.executable_path()); let contents = Std.input_file "test.ml" in let s = Extc.unzip (Extc.zip contents) in if s <> contents then failwith "zip + unzip failed"; let p = Process.run "test" [|"Hello"|] in let tmp = String.create 100 in let out = String.sub tmp 0 (Process.read_stdout p tmp 0 100) in if out <> "Hello" then failwith ("OUT=" ^ out ^ "#"); let err = String.sub tmp 0 (Process.read_stderr p tmp 0 100) in if err <> "ERROR" then failwith ("ERR= " ^ err ^ "#"); ignore(Process.write_stdin p "INPUT" 0 5); Process.close_stdin p; let out = String.sub tmp 0 (Process.read_stdout p tmp 0 100) in if out <> "INPUT" then failwith ("IN-OUT=" ^ out ^ "#"); let code = Process.exit p in if code <> 66 then failwith ("EXIT=" ^ string_of_int code); Process.close p; prerr_endline "End";haxe_4.2.4.orig/libs/extlib-leftovers/Makefile0000644000175000017500000000137414146064214021275 0ustar andyandy00000000000000# Makefile contributed by Alain Frisch OCAMLOPT=ocamlopt OCAMLC=ocamlc MODULES = \ multiArray rbuffer uCharExt uTF8 # the list is topologically sorted MLI = $(MODULES:=.mli) SRC = $(MLI) $(MODULES:=.ml) all: bytecode native opt: native bytecode: extlib-leftovers.cma native: extlib-leftovers.cmxa extlib-leftovers.cma: $(SRC) $(OCAMLC) -safe-string -a -o extlib-leftovers.cma $(SRC) extlib-leftovers.cmxa: $(SRC) $(OCAMLOPT) -safe-string -g -a -o extlib-leftovers.cmxa $(SRC) clean: rm -f $(wildcard *.cmo) $(wildcard *.cmx) $(wildcard *.o) $(wildcard *.cmi) $(wildcard *.cma) $(wildcard *.cmxa) $(wildcard *.a) $(wildcard *.lib) $(wildcard *.obj) rm -Rf doc .PHONY: all opt bytecode native doc copy install uninstall clean Makefile: ; $(SRC): ; haxe_4.2.4.orig/libs/extlib-leftovers/base64.ml0000644000175000017500000000721614146064214021254 0ustar andyandy00000000000000(* * Base64 - Base64 codec * Copyright (C) 2003 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) open ExtBytes exception Invalid_char exception Invalid_table external unsafe_char_of_int : int -> char = "%identity" type encoding_table = char array type decoding_table = int array let chars = [| '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';'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';'0';'1';'2';'3';'4';'5';'6';'7';'8';'9';'+';'/' |] let make_decoding_table tbl = if Array.length tbl <> 64 then raise Invalid_table; let d = Array.make 256 (-1) in for i = 0 to 63 do Array.unsafe_set d (int_of_char (Array.unsafe_get tbl i)) i; done; d let inv_chars = make_decoding_table chars let encode ?(tbl=chars) ch = if Array.length tbl <> 64 then raise Invalid_table; let data = ref 0 in let count = ref 0 in let flush() = if !count > 0 then begin let d = (!data lsl (6 - !count)) land 63 in IO.write ch (Array.unsafe_get tbl d); end; in let write c = let c = int_of_char c in data := (!data lsl 8) lor c; count := !count + 8; while !count >= 6 do count := !count - 6; let d = (!data asr !count) land 63 in IO.write ch (Array.unsafe_get tbl d) done; in let output s p l = for i = p to p + l - 1 do write (Bytes.unsafe_get s i) done; l in IO.create_out ~write ~output ~flush:(fun () -> flush(); IO.flush ch) ~close:(fun() -> flush(); IO.close_out ch) let decode ?(tbl=inv_chars) ch = if Array.length tbl <> 256 then raise Invalid_table; let data = ref 0 in let count = ref 0 in let rec fetch() = if !count >= 8 then begin count := !count - 8; let d = (!data asr !count) land 0xFF in unsafe_char_of_int d end else let c = int_of_char (IO.read ch) in let c = Array.unsafe_get tbl c in if c = -1 then raise Invalid_char; data := (!data lsl 6) lor c; count := !count + 6; fetch() in let read = fetch in let input s p l = let i = ref 0 in try while !i < l do Bytes.unsafe_set s (p + !i) (fetch()); incr i; done; l with IO.No_more_input when !i > 0 -> !i in let close() = count := 0; IO.close_in ch in IO.create_in ~read ~input ~close let str_encode ?(tbl=chars) s = let ch = encode ~tbl (IO.output_bytes()) in IO.nwrite_string ch s; IO.close_out ch let str_decode ?(tbl=inv_chars) s = let ch = decode ~tbl (IO.input_bytes s) in IO.nread_string ch ((Bytes.length s * 6) / 8) let encode_string ?(tbl=chars) s = let ch = encode ~tbl (IO.output_string ()) in IO.nwrite_string ch s; IO.close_out ch let decode_string ?(tbl=inv_chars) s = let ch = decode ~tbl (IO.input_string s) in IO.nread_string ch ((String.length s * 6) / 8) haxe_4.2.4.orig/libs/extlib-leftovers/base64.mli0000644000175000017500000000462714146064214021430 0ustar andyandy00000000000000(* * Base64 - Base64 codec * Copyright (C) 2003 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *) (** Base64 codec. 8-bit characters are encoded into 6-bit ones using ASCII lookup tables. Default tables maps 0..63 values on characters A-Z, a-z, 0-9, '+' and '/' (in that order). *) open ExtBytes (** This exception is raised when reading an invalid character from a base64 input. *) exception Invalid_char (** This exception is raised if the encoding or decoding table size is not correct. *) exception Invalid_table (** An encoding table maps integers 0..63 to the corresponding char. *) type encoding_table = char array (** A decoding table maps chars 0..255 to the corresponding 0..63 value or -1 if the char is not accepted. *) type decoding_table = int array (** erroneous interface, kept for compatibility use [encode_string] instead *) val str_encode : ?tbl:encoding_table -> string -> Bytes.t (** erroneous interface, kept for compatibility use [decode_string] instead *) val str_decode : ?tbl:decoding_table -> Bytes.t -> string (** Encode a string into Base64. *) val encode_string : ?tbl:encoding_table -> string -> string (** Decode a string encoded into Base64, raise [Invalid_char] if a character in the input string is not a valid one. *) val decode_string : ?tbl:decoding_table -> string -> string (** Generic base64 encoding over an output. *) val encode : ?tbl:encoding_table -> 'a IO.output -> 'a IO.output (** Generic base64 decoding over an input. *) val decode : ?tbl:decoding_table -> IO.input -> IO.input (** Create a valid decoding table from an encoding one. *) val make_decoding_table : encoding_table -> decoding_table haxe_4.2.4.orig/libs/extlib-leftovers/dune0000644000175000017500000000014014146064214020501 0ustar andyandy00000000000000(include_subdirs no) (library (name extlib_leftovers) (libraries extlib) ; (wrapped false) )haxe_4.2.4.orig/libs/extlib-leftovers/multiArray.ml0000644000175000017500000001506114146064214022316 0ustar andyandy00000000000000(* * MultiArray - Resizeable Big Ocaml arrays * Copyright (C) 2012 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type 'a intern external ilen : 'a intern -> int = "%obj_size" let idup (x : 'a intern) = if ilen x = 0 then x else (Obj.magic (Obj.dup (Obj.repr x)) : 'a intern) let imake tag len = (Obj.magic (Obj.new_block tag len) : 'a intern) external iget : 'a intern -> int -> 'a = "%obj_field" external iset : 'a intern -> int -> 'a -> unit = "%obj_set_field" type 'a t = { mutable arr : 'a intern intern; mutable len : int; mutable darr : 'a intern option; } exception Invalid_arg of int * string * string let invalid_arg n f p = raise (Invalid_arg (n,f,p)) let length d = d.len (* create 1K chunks, which allows up to 4GB elements *) let nbits = 10 let size = 1 lsl nbits let mask = size - 1 let create() = { len = 0; arr = imake 0 0; darr = Some (imake 0 0); } let init len f = if len > Sys.max_array_length then begin let count = (len + size - 1) lsr nbits in let d = { len = len; arr = imake 0 count; darr = None; } in let max = count - 1 in for i = 0 to max do let arr = imake 0 size in iset d.arr i arr; for j = 0 to (if i = max then len land mask else size) - 1 do iset arr j (f ((i lsl nbits) + j)) done; done; d end else begin let arr = imake 0 len in for i = 0 to len - 1 do iset arr i (f i) done; { len = len; arr = imake 0 0; darr = Some arr; } end let make len e = if len > Sys.max_array_length then begin let count = (len + size - 1) lsr nbits in let d = { len = len; arr = imake 0 count; darr = None; } in let max = count - 1 in for i = 0 to max do let arr = imake 0 size in iset d.arr i arr; for j = 0 to (if i = max then len land mask else size) - 1 do iset arr j e done; done; d end else begin let arr = imake 0 len in for i = 0 to len - 1 do iset arr i e done; { len = len; arr = imake 0 0; darr = Some arr; } end let empty d = d.len = 0 let get d idx = if idx < 0 || idx >= d.len then invalid_arg idx "get" "index"; match d.darr with | None -> iget (iget d.arr (idx lsr nbits)) (idx land mask) | Some arr -> iget arr idx let set d idx v = if idx < 0 || idx >= d.len then invalid_arg idx "set" "index"; match d.darr with | None -> iset (iget d.arr (idx lsr nbits)) (idx land mask) v | Some arr -> iset arr idx v let rec add d v = (match d.darr with | None -> let asize = ilen d.arr in if d.len >= asize lsl nbits then begin let narr = imake 0 (asize + 1) in for i = 0 to asize-1 do iset narr i (iget d.arr i); done; iset narr asize (imake 0 size); d.arr <- narr; end; iset (iget d.arr (d.len lsr nbits)) (d.len land mask) v; | Some arr -> if d.len < ilen arr then begin (* set *) iset arr d.len v; end else if d.len lsl 1 >= Sys.max_array_length then begin (* promote *) let count = (d.len + size) lsr nbits in d.darr <- None; d.arr <- imake 0 count; let max = count - 1 in for i = 0 to max do let arr2 = imake 0 size in iset d.arr i arr2; for j = 0 to (if i = max then d.len land mask else size) - 1 do iset arr2 j (iget arr ((i lsl nbits) + j)) done; done; iset (iget d.arr (d.len lsr nbits)) (d.len land mask) v; end else begin (* resize *) let arr2 = imake 0 (if d.len = 0 then 1 else d.len lsl 1) in for i = 0 to d.len - 1 do iset arr2 i (iget arr i) done; iset arr2 d.len v; d.darr <- Some arr2; end); d.len <- d.len + 1 let clear d = d.len <- 0; d.arr <- imake 0 0; d.darr <- Some (imake 0 0) let of_array src = let c = create() in Array.iteri (fun i v -> add c v) src; c let of_list src = let c = create() in List.iter (add c) src; c let iter f d = match d.darr with | None -> let max = ilen d.arr - 1 in for i = 0 to max do let arr = iget d.arr i in for j = 0 to (if i = max then (d.len land mask) else size) - 1 do f (iget arr j) done; done | Some arr -> for i = 0 to d.len - 1 do f (iget arr i) done let iteri f d = match d.darr with | None -> let max = ilen d.arr - 1 in for i = 0 to max do let arr = iget d.arr i in for j = 0 to (if i = max then (d.len land mask) else size) - 1 do f ((i lsl nbits) + j) (iget arr j) done; done | Some arr -> for i = 0 to d.len - 1 do f i (iget arr i) done let map f d = match d.darr with | None -> let max = ilen d.arr - 1 in let d2 = { len = d.len; arr = imake 0 (max + 1); darr = None; } in for i = 0 to max do let arr = iget d.arr i in let narr = imake 0 size in iset d2.arr i narr; for j = 0 to (if i = max then (d.len land mask) else size) - 1 do iset narr j (f (iget arr j)) done; done; d2 | Some arr -> let arr2 = imake 0 d.len in for i = 0 to d.len - 1 do iset arr2 i (f (iget arr i)) done; { len = d.len; arr = imake 0 0; darr = Some (arr2); } let mapi f d = match d.darr with | None -> let max = ilen d.arr - 1 in let d2 = { len = d.len; arr = imake 0 (max + 1); darr = None; } in for i = 0 to max do let arr = iget d.arr i in let narr = imake 0 size in iset d2.arr i narr; for j = 0 to (if i = max then (d.len land mask) else size) - 1 do iset narr j (f ((i lsl nbits) + j) (iget arr j)) done; done; d2 | Some arr -> let arr2 = imake 0 d.len in for i = 0 to d.len - 1 do iset arr2 i (f i (iget arr i)) done; { len = d.len; arr = imake 0 0; darr = Some (arr2); } let fold_left f acc d = match d.darr with | None -> let acc = ref acc in let max = ilen d.arr - 1 in for i = 0 to max do let arr = iget d.arr i in for j = 0 to (if i = max then (d.len land mask) else size) - 1 do acc := f !acc (iget arr j) done; done; !acc | Some arr -> let acc = ref acc in for i = 0 to d.len - 1 do acc := f !acc (iget arr i) done; !acchaxe_4.2.4.orig/libs/extlib-leftovers/multiArray.mli0000644000175000017500000001065014146064214022466 0ustar andyandy00000000000000(* * MultiArray - Resizeable Ocaml big arrays * Copyright (C) 201 Nicolas Cannasse * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) (** Dynamic Big arrays. A dynamic array is equivalent to a OCaml array that will resize itself when elements are added or removed. MultiArray is different from DynArray since it allows more than 4 Millions elements on 32 bits systems. A MultiArray of size <= Sys.max_array_length will use a single indirection internal representation. If the size exceeds Sys.max_array_length, e.g. by adding an additional element, the internal representation is promoted to use double indirection. This allows for bigger arrays, but it also slower. *) type 'a t exception Invalid_arg of int * string * string (** When an operation on an array fails, [Invalid_arg] is raised. The integer is the value that made the operation fail, the first string contains the function name that has been called and the second string contains the parameter name that made the operation fail. *) (** {6 MultiArray creation} *) val create : unit -> 'a t (** [create()] returns a new empty dynamic array. *) val make : int -> 'a -> 'a t (** [make count value] returns an array with some memory already allocated and [count] elements initialized to [value]. *) val init : int -> (int -> 'a) -> 'a t (** [init n f] returns an array of [n] elements filled with values returned by [f 0 , f 1, ... f (n-1)]. *) (** {6 MultiArray manipulation functions} *) val empty : 'a t -> bool (** Return true if the number of elements in the array is 0. *) val length : 'a t -> int (** Return the number of elements in the array. *) val get : 'a t -> int -> 'a (** [get darr idx] gets the element in [darr] at index [idx]. If [darr] has [len] elements in it, then the valid indexes range from [0] to [len-1]. *) val set : 'a t -> int -> 'a -> unit (** [set darr idx v] sets the element of [darr] at index [idx] to value [v]. The previous value is overwritten. *) val add : 'a t -> 'a -> unit (** [add darr v] appends [v] onto [darr]. [v] becomes the new last element of [darr]. If required, the size of the internal representation is doubled. If this would exceed Sys.max_array_length, the internal representation is automatically changed to double indirection and the current contents are copied over. *) val clear : 'a t -> unit (** remove all elements from the array and resize it to 0. *) (** {6 MultiArray copy and conversion} *) val of_array : 'a array -> 'a t (** [of_array arr] returns an array with the elements of [arr] in it in order. *) val of_list : 'a list -> 'a t (** [of_list lst] returns a dynamic array with the elements of [lst] in it in order. *) (** {6 MultiArray functional support} *) val iter : ('a -> unit) -> 'a t -> unit (** [iter f darr] calls the function [f] on every element of [darr]. It is equivalent to [for i = 0 to length darr - 1 do f (get darr i) done;] *) val iteri : (int -> 'a -> unit) -> 'a t -> unit (** [iter f darr] calls the function [f] on every element of [darr]. It is equivalent to [for i = 0 to length darr - 1 do f i (get darr i) done;] *) val map : ('a -> 'b) -> 'a t -> 'b t (** [map f darr] applies the function [f] to every element of [darr] and creates a dynamic array from the results - similar to [List.map] or [Array.map]. *) val mapi : (int -> 'a -> 'b) -> 'a t -> 'b t (** [mapi f darr] applies the function [f] to every element of [darr] and creates a dynamic array from the results - similar to [List.mapi] or [Array.mapi]. *) val fold_left : ('b -> 'a -> 'b) -> 'b -> 'a t -> 'b (** [fold_left f x darr] computes [f ( ... ( f ( f (get darr 0) x) (get darr 1) ) ... ) (get darr n-1)], similar to [Array.fold_left] or [List.fold_left]. *)haxe_4.2.4.orig/libs/extlib-leftovers/rbuffer.ml0000644000175000017500000001572614146064214021630 0ustar andyandy00000000000000(**************************************************************************) (* *) (* Copyright (C) Jean-Christophe Filliatre *) (* *) (* This software is free software; you can redistribute it and/or *) (* modify it under the terms of the GNU Library General Public *) (* License version 2.1, with the special exception on linking *) (* described in file LICENSE. *) (* *) (* This software is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *) (* *) (**************************************************************************) (* Ropes-based implementation of Buffer *) type rope = | Str of string | App of rope * rope * int (* total length *) let rope_empty = Str "" let rope_length = function | Str s -> String.length s | App (_, _, n) -> n let rec rope_nth i = function | Str s -> String.unsafe_get s i | App (l, r, _) -> let ll = rope_length l in if i < ll then rope_nth i l else rope_nth (i - ll) r type t = { mutable rope : rope; (* the left part is a rope *) mutable buffer : bytes; (* the right part is a buffer... *) mutable position : int; (* ...with [position] bytes used *) } let create n = let n = if n < 1 then 1 else n in let n = if n > Sys.max_string_length then Sys.max_string_length else n in let s = Bytes.create n in { rope = rope_empty; buffer = s; position = 0; } let reset b = b.rope <- rope_empty; b.position <- 0 let clear = reset let length b = rope_length b.rope + b.position (* [blit s i r] blits the contents of rope [r] in string [s] at index [i] *) let rec blit_rope s i = function | Str str -> String.blit str 0 s i (String.length str) | App (l, r, _) -> let ll = rope_length l in blit_rope s i l; blit_rope s (i + ll) r (* rename contents to unsafe_contents to avoid accidental usage *) let unsafe_contents b = let r = rope_length b.rope in let n = b.position in let len = r + n in if len > Sys.max_string_length then invalid_arg "Rbuffer.contents"; let s = Bytes.create len in blit_rope s 0 b.rope; Bytes.blit b.buffer 0 s r n; Bytes.unsafe_to_string s (* [blit_subrope s i ofs len] blits the subrope [r[ofs..ofs+len-1]] in string [s] at index [i] *) let rec blit_subrope s i ofs len = function | Str str -> assert (ofs >= 0 && ofs + len <= String.length str); String.blit str ofs s i len | App (l, r, _) -> let ll = rope_length l in if ofs + len <= ll then blit_subrope s i ofs len l else if ofs >= ll then blit_subrope s i (ofs - ll) len r else begin let lenl = ll - ofs in blit_subrope s i ofs lenl l; blit_subrope s (i + lenl) 0 (len - lenl) r end let sub b ofs len = let r = rope_length b.rope in if len > Sys.max_string_length || ofs < 0 || len < 0 || ofs > r + b.position - len then invalid_arg "Buffer.sub"; let s = Bytes.create len in if ofs + len <= r then blit_subrope s 0 ofs len b.rope else if ofs >= r then Bytes.blit b.buffer (ofs - r) s 0 len else begin blit_subrope s 0 ofs (r - ofs) b.rope; Bytes.blit b.buffer 0 s (r - ofs) (ofs + len - r) end; Bytes.unsafe_to_string s let nth b i = let r = rope_length b.rope in if i < 0 || i >= r + b.position then invalid_arg "Buffer.nth"; if i < r then rope_nth i b.rope else Bytes.unsafe_get b.buffer (i - r) (* moves the data in [b.buffer], if any, to the rope; ensures [b.position=0] *) let move_buffer_to_rope b = let pos = b.position in if pos > 0 then begin let n = Bytes.length b.buffer in if pos = n then begin (* whole buffer goes to the rope; faster to allocate a new buffer *) b.rope <- App (b.rope, Str (Bytes.unsafe_to_string b.buffer), rope_length b.rope + pos); b.buffer <- Bytes.create n end else begin (* part of the buffer goes to the rope; easier to copy it *) b.rope <- App (b.rope, Str (Bytes.sub_string b.buffer 0 pos), rope_length b.rope + pos) end; b.position <- 0 end let add_char b c = if b.position = Bytes.length b.buffer then move_buffer_to_rope b; let pos = b.position in Bytes.set b.buffer pos c; b.position <- pos + 1 (* allocates space for [len] bytes and returns the corresponding place (as a string and an offset within that string) *) let alloc b len = let n = Bytes.length b.buffer in let pos = b.position in let len' = pos + len in if len' <= n then begin (* fits in the buffer *) b.position <- len'; b.buffer, pos end else if len' <= Sys.max_string_length then begin (* buffer and len fit in a new string, allocated in the rope *) let str = Bytes.create len' in Bytes.blit b.buffer 0 str 0 pos; b.rope <- App (b.rope, Str (Bytes.unsafe_to_string str), rope_length b.rope + len'); b.position <- 0; str, pos end else begin (* buffer and len require two strings, allocated in the rope *) let str = Bytes.create len in b.rope <- App (b.rope, App (Str (Bytes.sub_string b.buffer 0 pos), Str (Bytes.unsafe_to_string str), len'), rope_length b.rope + len'); b.position <- 0; str, 0 end let safe_add_substring b s offset len = let str, pos = alloc b len in String.blit s offset str pos len let add_substring b s offset len = if offset < 0 || len < 0 || offset > String.length s - len then invalid_arg "Buffer.add_substring"; safe_add_substring b s offset len let add_string b s = safe_add_substring b s 0 (String.length s) let add_buffer b b2 = if b.position > 0 then move_buffer_to_rope b; (* now we have b.position = 0 *) b.rope <- App (b.rope, b2.rope, rope_length b.rope + rope_length b2.rope); add_substring b (Bytes.unsafe_to_string b2.buffer) 0 b2.position let rec add_channel b ic len = if len <= Sys.max_string_length then begin let str, pos = alloc b len in really_input ic str pos len end else begin let str, pos = alloc b Sys.max_string_length in really_input ic str pos Sys.max_string_length; add_channel b ic (len - Sys.max_string_length) end let output_buffer oc b = let rec loop wl = match wl with | Str s :: wl -> output oc (Bytes.of_string s) 0 (String.length s); loop wl | App( l, r, _) :: wl -> loop (l :: r :: wl) | [] -> () in loop [b.rope]; output oc b.buffer 0 b.position open Format let print fmt b = let rec loop wl = match wl with | Str s :: wl -> pp_print_string fmt s; loop wl | App( l, r, _) :: wl -> loop (l :: r :: wl) | [] -> () in loop [b.rope]; pp_print_string fmt (Bytes.sub_string b.buffer 0 b.position) haxe_4.2.4.orig/libs/extlib-leftovers/rbuffer.mli0000644000175000017500000000304514146064214021770 0ustar andyandy00000000000000(**************************************************************************) (* *) (* Copyright (C) Jean-Christophe Filliatre *) (* *) (* This software is free software; you can redistribute it and/or *) (* modify it under the terms of the GNU Library General Public *) (* License version 2.1, with the special exception on linking *) (* described in file LICENSE. *) (* *) (* This software is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *) (* *) (**************************************************************************) (* Ropes-based implementation of Buffer *) type t val create : int -> t val reset : t -> unit val clear : t -> unit val length : t -> int val unsafe_contents : t -> string val sub : t -> int -> int -> string val nth : t -> int -> char val add_char : t -> char -> unit val add_substring : t -> string -> int -> int -> unit val add_string : t -> string -> unit val add_buffer : t -> t -> unit val add_channel : t -> in_channel -> int -> unit val output_buffer : out_channel -> t -> unit haxe_4.2.4.orig/libs/extlib-leftovers/uCharExt.ml0000644000175000017500000000310714146064214021706 0ustar andyandy00000000000000(* * UChar - Unicode (ISO-UCS) characters * Copyright (C) 2002, 2003 Yamagata Yoriyuki * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type t = int exception Out_of_range external unsafe_chr_of_uint : int -> t = "%identity" external uint_code : t -> int = "%identity" let char_of c = if c >= 0 && c < 0x100 then Char.chr c else raise Out_of_range let of_char = Char.code let code c = if c >= 0 then c else raise Out_of_range let chr n = if n >= 0 && n lsr 31 = 0 then n else invalid_arg "UChar.chr" let chr_of_uint n = if n lsr 31 = 0 then n else invalid_arg "UChar.uint_chr" let eq (u1 : t) (u2 : t) = u1 = u2 let compare u1 u2 = let sgn = (u1 lsr 16) - (u2 lsr 16) in if sgn = 0 then (u1 land 0xFFFF) - (u2 land 0xFFFF) else sgn type uchar = t let int_of_uchar u = uint_code u let uchar_of_int n = chr_of_uint n haxe_4.2.4.orig/libs/extlib-leftovers/uCharExt.mli0000644000175000017500000000545214146064214022064 0ustar andyandy00000000000000(* * UChar - Unicode (ISO-UCS) characters * Copyright (C) 2002, 2003 Yamagata Yoriyuki * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) (** Unicode (ISO-UCS) characters. This module implements Unicode (actually ISO-UCS) characters. All 31-bit code points are allowed. *) (** Unicode characters. All 31-bit code points are allowed.*) type t exception Out_of_range (** [char_of u] returns the Latin-1 representation of [u]. If [u] can not be represented by Latin-1, raises Out_of_range *) val char_of : t -> char (** [of_char c] returns the Unicode character of the Latin-1 character [c] *) val of_char : char -> t (** [code u] returns the Unicode code number of [u]. If the value can not be represented by a positive integer, raise Out_of_range *) val code : t -> int (** [code n] returns the Unicode character with the code number [n]. If n >= 2^32 or n < 0, raises [invalid_arg] *) val chr : int -> t (** [uint_code u] returns the Unicode code number of [u]. The returned int is unsigned, that is, on 32-bit platforms, the sign bit is used for storing the 31-th bit of the code number. *) external uint_code : t -> int = "%identity" (** [chr_of_uint n] returns the Unicode character of the code number [n]. [n] is interpreted as unsigned, that is, on 32-bit platforms, the sign bit is treated as the 31-th bit of the code number. If n exceeds 31-bit values, then raise [Invalid_arg]. *) val chr_of_uint : int -> t (** Unsafe version of {!UChar.chr_of_uint}. No check of its argument is performed. *) external unsafe_chr_of_uint : int -> t = "%identity" (** Equality by code point comparison *) val eq : t -> t -> bool (** [compare u1 u2] returns, a value > 0 if [u1] has a larger Unicode code number than [u2], 0 if [u1] and [u2] are the same Unicode character, a value < 0 if [u1] has a smaller Unicode code number than [u2]. *) val compare : t -> t -> int (** Aliases of [type t] *) type uchar = t (** Alias of [uint_code] *) val int_of_uchar : uchar -> int (** Alias of [chr_of_uint] *) val uchar_of_int : int -> uchar haxe_4.2.4.orig/libs/extlib-leftovers/uTF8.ml0000644000175000017500000001677014146064214020763 0ustar andyandy00000000000000(* * UTF-8 - UTF-8 encoded Unicode string * Copyright 2002, 2003 (C) Yamagata Yoriyuki. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open UCharExt type t = string type index = int let look s i = let n' = let n = Char.code s.[i] in if n < 0x80 then n else if n <= 0xdf then (n - 0xc0) lsl 6 lor (0x7f land (Char.code s.[i + 1])) else if n <= 0xef then let n' = n - 0xe0 in let m0 = Char.code s.[i + 2] in let m = Char.code (String.unsafe_get s (i + 1)) in let n' = n' lsl 6 lor (0x7f land m) in n' lsl 6 lor (0x7f land m0) else if n <= 0xf7 then let n' = n - 0xf0 in let m0 = Char.code s.[i + 3] in let m = Char.code (String.unsafe_get s (i + 1)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 2)) in let n' = n' lsl 6 lor (0x7f land m) in n' lsl 6 lor (0x7f land m0) else if n <= 0xfb then let n' = n - 0xf8 in let m0 = Char.code s.[i + 4] in let m = Char.code (String.unsafe_get s (i + 1)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 2)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 3)) in let n' = n' lsl 6 lor (0x7f land m) in n' lsl 6 lor (0x7f land m0) else if n <= 0xfd then let n' = n - 0xfc in let m0 = Char.code s.[i + 5] in let m = Char.code (String.unsafe_get s (i + 1)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 2)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 3)) in let n' = n' lsl 6 lor (0x7f land m) in let m = Char.code (String.unsafe_get s (i + 4)) in let n' = n' lsl 6 lor (0x7f land m) in n' lsl 6 lor (0x7f land m0) else invalid_arg "UTF8.look" in Obj.magic n' let rec search_head s i = if i >= String.length s then i else let n = Char.code (String.unsafe_get s i) in if n < 0x80 || n >= 0xc2 then i else search_head s (i + 1) let next s i = let n = Char.code s.[i] in if n < 0x80 then i + 1 else if n < 0xc0 then search_head s (i + 1) else if n <= 0xdf then i + 2 else if n <= 0xef then i + 3 else if n <= 0xf7 then i + 4 else if n <= 0xfb then i + 5 else if n <= 0xfd then i + 6 else invalid_arg "UTF8.next" let rec search_head_backward s i = if i < 0 then -1 else let n = Char.code s.[i] in if n < 0x80 || n >= 0xc2 then i else search_head_backward s (i - 1) let prev s i = search_head_backward s (i - 1) let move s i n = if n >= 0 then let rec loop i n = if n <= 0 then i else loop (next s i) (n - 1) in loop i n else let rec loop i n = if n >= 0 then i else loop (prev s i) (n + 1) in loop i n let rec nth_aux s i n = if n = 0 then i else nth_aux s (next s i) (n - 1) let nth s n = nth_aux s 0 n let last s = search_head_backward s (String.length s - 1) let out_of_range s i = i < 0 || i >= String.length s let compare_index _ i j = i - j let get s n = look s (nth s n) let add_uchar buf u = let masq = 0b111111 in let k = int_of_uchar u in if k < 0 || k >= 0x4000000 then begin Buffer.add_char buf (Char.chr (0xfc + (k lsr 30))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 24) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 18) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); end else if k <= 0x7f then Buffer.add_char buf (Char.unsafe_chr k) else if k <= 0x7ff then begin Buffer.add_char buf (Char.unsafe_chr (0xc0 lor (k lsr 6))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))) end else if k <= 0xffff then begin Buffer.add_char buf (Char.unsafe_chr (0xe0 lor (k lsr 12))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); end else if k <= 0x1fffff then begin Buffer.add_char buf (Char.unsafe_chr (0xf0 + (k lsr 18))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); end else begin Buffer.add_char buf (Char.unsafe_chr (0xf8 + (k lsr 24))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 18) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 12) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor ((k lsr 6) land masq))); Buffer.add_char buf (Char.unsafe_chr (0x80 lor (k land masq))); end let init len f = let buf = Buffer.create len in for c = 0 to len - 1 do add_uchar buf (f c) done; Buffer.contents buf let rec length_aux s c i = if i >= String.length s then c else let n = Char.code (String.unsafe_get s i) in let k = if n < 0x80 then 1 else if n < 0xc0 then invalid_arg "UTF8.length" else if n < 0xe0 then 2 else if n < 0xf0 then 3 else if n < 0xf8 then 4 else if n < 0xfc then 5 else if n < 0xfe then 6 else invalid_arg "UTF8.length" in length_aux s (c + 1) (i + k) let length s = length_aux s 0 0 let rec iter_aux proc s i = if i >= String.length s then () else let u = look s i in proc u; iter_aux proc s (next s i) let iter proc s = iter_aux proc s 0 let compare s1 s2 = Pervasives.compare s1 s2 exception Malformed_code let validate s = let rec trail c i a = if c = 0 then a else if i >= String.length s then raise Malformed_code else let n = Char.code (String.unsafe_get s i) in if n < 0x80 || n >= 0xc0 then raise Malformed_code else trail (c - 1) (i + 1) (a lsl 6 lor (n - 0x80)) in let rec main i = if i >= String.length s then () else let n = Char.code (String.unsafe_get s i) in if n < 0x80 then main (i + 1) else if n < 0xc2 then raise Malformed_code else if n <= 0xdf then if trail 1 (i + 1) (n - 0xc0) < 0x80 then raise Malformed_code else main (i + 2) else if n <= 0xef then if trail 2 (i + 1) (n - 0xe0) < 0x800 then raise Malformed_code else main (i + 3) else if n <= 0xf7 then if trail 3 (i + 1) (n - 0xf0) < 0x10000 then raise Malformed_code else main (i + 4) else if n <= 0xfb then if trail 4 (i + 1) (n - 0xf8) < 0x200000 then raise Malformed_code else main (i + 5) else if n <= 0xfd then let n = trail 5 (i + 1) (n - 0xfc) in if n lsr 16 < 0x400 then raise Malformed_code else main (i + 6) else raise Malformed_code in main 0 module Buf = struct include Buffer type buf = t let add_char = add_uchar end haxe_4.2.4.orig/libs/extlib-leftovers/uTF8.mli0000644000175000017500000001164714146064214021132 0ustar andyandy00000000000000(* * UTF-8 - UTF-8 encoded Unicode string * Copyright 2002, 2003 (C) Yamagata Yoriyuki. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version, * with the special exception on linking described in file LICENSE. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) (** UTF-8 encoded Unicode strings. The Module for UTF-8 encoded Unicode strings. *) open UCharExt (** UTF-8 encoded Unicode strings. the type is normal string. *) type t = string exception Malformed_code (** [validate s] Succeeds if s is valid UTF-8, otherwise raises Malformed_code. Other functions assume strings are valid UTF-8, so it is prudent to test their validity for strings from untrusted origins. *) val validate : t -> unit (* All functions below assume string are valid UTF-8. If not, * the result is unspecified. *) (** [get s n] returns [n]-th Unicode character of [s]. The call requires O(n)-time. *) val get : t -> int -> uchar (** [init len f] returns a new string which contains [len] Unicode characters. The i-th Unicode character is initialized by [f i] *) val init : int -> (int -> uchar) -> t (** [length s] returns the number of Unicode characters contained in s *) val length : t -> int (** Positions in the string represented by the number of bytes from the head. The location of the first character is [0] *) type index = int (** [nth s n] returns the position of the [n]-th Unicode character. The call requires O(n)-time *) val nth : t -> int -> index (** The position of the head of the last Unicode character. *) val last : t -> index (** [look s i] returns the Unicode character of the location [i] in the string [s]. *) val look : t -> index -> uchar (** [out_of_range s i] tests whether [i] is a position inside of [s]. *) val out_of_range : t -> index -> bool (** [compare_index s i1 i2] returns a value < 0 if [i1] is the position located before [i2], 0 if [i1] and [i2] points the same location, a value > 0 if [i1] is the position located after [i2]. *) val compare_index : t -> index -> index -> int (** [next s i] returns the position of the head of the Unicode character located immediately after [i]. If [i] is inside of [s], the function always successes. If [i] is inside of [s] and there is no Unicode character after [i], the position outside [s] is returned. If [i] is not inside of [s], the behaviour is unspecified. *) val next : t -> index -> index (** [prev s i] returns the position of the head of the Unicode character located immediately before [i]. If [i] is inside of [s], the function always successes. If [i] is inside of [s] and there is no Unicode character before [i], the position outside [s] is returned. If [i] is not inside of [s], the behaviour is unspecified. *) val prev : t -> index -> index (** [move s i n] returns [n]-th Unicode character after [i] if n >= 0, [n]-th Unicode character before [i] if n < 0. If there is no such character, the result is unspecified. *) val move : t -> index -> int -> index (** [iter f s] applies [f] to all Unicode characters in [s]. The order of application is same to the order of the Unicode characters in [s]. *) val iter : (uchar -> unit) -> t -> unit (** Code point comparison by the lexicographic order. [compare s1 s2] returns a positive integer if [s1] > [s2], 0 if [s1] = [s2], a negative integer if [s1] < [s2]. *) val compare : t -> t -> int val add_uchar : Buffer.t -> uchar -> unit (** Buffer module for UTF-8 strings *) module Buf : sig (** Buffers for UTF-8 strings. *) type buf (** [create n] creates a buffer with the initial size [n]-bytes. *) val create : int -> buf (* The rest of functions is similar to the ones of Buffer in stdlib. *) (** [contents buf] returns the contents of the buffer. *) val contents : buf -> t (** Empty the buffer, but retains the internal storage which was holding the contents *) val clear : buf -> unit (** Empty the buffer and de-allocate the internal storage. *) val reset : buf -> unit (** Add one Unicode character to the buffer. *) val add_char : buf -> uchar -> unit (** Add the UTF-8 string to the buffer. *) val add_string : buf -> t -> unit (** [add_buffer b1 b2] adds the contents of [b2] to [b1]. The contents of [b2] is not changed. *) val add_buffer : buf -> buf -> unit end haxe_4.2.4.orig/libs/ilib/Makefile0000644000175000017500000000140114146064214016705 0ustar andyandy00000000000000OCAMLOPT=ocamlopt OCAMLC=ocamlc SRCS=peData.ml peReader.ml peWriter.ml ilMeta.mli ilData.mli ilMetaTools.ml ilMetaDebug.ml ilMetaReader.ml all: native bytecode native: ilib.cmxa bytecode: ilib.cma ilib.cmxa: $(SRCS) ocamlfind $(OCAMLOPT) -g -package extlib -safe-string -a -o ilib.cmxa $(SRCS) ilib.cma: $(SRCS) ocamlfind $(OCAMLC) -g -package extlib -safe-string -a -o ilib.cma $(SRCS) dump: ilib.cmxa dump.ml peDataDebug.ml ilMetaDebug.ml ocamlfind $(OCAMLOPT) -g -package extlib -safe-string -o dump ../extlib/extLib.cmxa ilib.cmxa peDataDebug.ml dump.ml clean: rm -f ilib.cma ilib.cmxa ilib.lib ilib.a $(wildcard *.cmx) $(wildcard *.cmo) $(wildcard *.obj) $(wildcard *.o) $(wildcard *.cmi) dump .PHONY: all bytecode native clean Makefile: ; $(SRCS): ; haxe_4.2.4.orig/libs/ilib/dump.ml0000644000175000017500000000273514146064214016557 0ustar andyandy00000000000000open PeDataDebug;; open PeData;; open PeReader;; open Printf;; open IlData;; open IlMetaTools;; open IlMetaDebug;; let main () = if Array.length Sys.argv <> 2 then print_endline "Usage: dump " else begin let r = create_r (open_in Sys.argv.(1)) PMap.empty in let ctx = read r in let pe = ctx.pe_header in print_endline (coff_header_s pe.pe_coff_header); print_endline (pe_header_s pe); let idata = read_idata ctx in List.iter (fun t -> print_endline (idata_table_s t)) idata; let clr_header = read_clr_header ctx in print_endline (clr_header_s (clr_header)); let cache = IlMetaReader.create_cache () in let meta = IlMetaReader.read_meta_tables ctx clr_header cache in Hashtbl.iter (fun path _ -> print_endline ("\n\nclass " ^ path_s path ^ ": "); let cls = convert_class meta path in List.iter (fun t -> printf "%d: <%s> " t.tnumber (if t.tname = None then "_" else Option.get t.tname)) cls.ctypes; printf "\n\tis nested: %s - %s\n" (string_of_bool (cls.cenclosing <> None)) (if cls.cenclosing = None then "None" else path_s (Option.get cls.cenclosing)); print_endline "\tfields:"; List.iter (fun f -> printf "\t\t%s : %s\n" f.fname (ilsig_s f.fsig.ssig)) cls.cfields; print_endline "\tmethods:"; List.iter (fun m -> printf "\t\t%s : %s\n" m.mname (ilsig_s m.msig.ssig)) cls.cmethods; print_endline "\tprops:"; List.iter (fun p -> printf "\t\t%s : %s\n" p.pname (ilsig_s p.psig.ssig)) cls.cprops; ) meta.il_typedefs end;; main() haxe_4.2.4.orig/libs/ilib/dune0000644000175000017500000000024014146064214016123 0ustar andyandy00000000000000(include_subdirs no) (library (name ilib) (modules_without_implementation ilData ilMeta) (modules (:standard \ dump)) (libraries extlib) (wrapped false) )haxe_4.2.4.orig/libs/ilib/ilData.mli0000644000175000017500000000566514146064214017166 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open IlMeta;; type ilpath = string list * string list * string type ilsig = IlMeta.ilsig and ilsig_norm = | LVoid | LBool | LChar | LInt8 | LUInt8 | LInt16 | LUInt16 | LInt32 | LUInt32 | LInt64 | LUInt64 | LFloat32 | LFloat64 | LString | LObject | LPointer of ilsig_norm | LTypedReference | LIntPtr | LUIntPtr | LManagedPointer of ilsig_norm | LValueType of ilpath * ilsig_norm list | LClass of ilpath * ilsig_norm list | LTypeParam of int | LMethodTypeParam of int | LVector of ilsig_norm | LArray of ilsig_norm * (int option * int option) array | LMethod of callconv list * ilsig_norm * (ilsig_norm list) | LSentinel and ilsig_t = { snorm : ilsig_norm; ssig : ilsig; } type ilversion = int * int (* minor + major *) type ilclass = { cpath : ilpath; cflags : type_def_flags; csuper : ilsig_t option; cfields : ilfield list; cmethods : ilmethod list; cimplements : ilsig_t list; ctypes : type_param list; cprops : ilprop list; cevents : ilevent list; (* cevents : *) cenclosing : ilpath option; cnested : ilpath list; cattrs : meta_custom_attribute list; } and type_param = { tnumber : int; tflags : generic_flags; tname : string option; tconstraints : ilsig_t list; } and ilevent = { ename : string; eflags : event_flags; eadd : (string * method_flags) option; eremove : (string * method_flags) option; eraise : (string * method_flags) option; esig : ilsig_t; } and ilfield = { fname : string; fflags : field_flags; fsig : ilsig_t; fconstant : constant option; } and ilmethod = { mname : string; mflags : method_flags; msig : ilsig_t; margs : ilmethod_arg list; mret : ilsig_t; moverride : (ilpath * string) option; (* method_impl *) (* refers to the signature of the declaring class *) mtypes : type_param list; msemantics : semantic_flags; } and ilmethod_arg = string * param_flags * ilsig_t and ilprop = { pname : string; psig : ilsig_t; pflags : property_flags; pget : (string * method_flags) option; pset : (string * method_flags) option; } type ilctx = { il_tables : (clr_meta DynArray.t) array; il_relations : (meta_pointer, clr_meta) Hashtbl.t; il_typedefs : (ilpath, meta_type_def) Hashtbl.t; } haxe_4.2.4.orig/libs/ilib/ilMeta.mli0000644000175000017500000011242214146064214017171 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; (* useful types for describing CLI metadata *) type guid = string (* reference from the #GUID stream *) type stringref = string (* reference from the #Strings stream *) type blobref = string (* reference from the #Blob stream *) type id = stringref (* a stringref that references an identifier. *) (* must begin with an alphabetic character, or the following characters: *) (* #, $, @, _ *) (* and continue with alphanumeric characters or one of the following: *) (* ?, $, @, _, ` *) type ns = id list type rid = int (* record id on a specified meta table *) type clr_meta_idx = (* strongly-type each table index *) | IModule | ITypeRef | ITypeDef | IFieldPtr | IField | IMethodPtr | IMethod | IParamPtr | IParam | IInterfaceImpl | IMemberRef | IConstant | ICustomAttribute | IFieldMarshal | IDeclSecurity | IClassLayout | IFieldLayout | IStandAloneSig | IEventMap | IEventPtr | IEvent | IPropertyMap | IPropertyPtr | IProperty | IMethodSemantics | IMethodImpl | IModuleRef | ITypeSpec | IImplMap | IFieldRVA | IENCLog | IENCMap | IAssembly | IAssemblyProcessor | IAssemblyOS | IAssemblyRef | IAssemblyRefProcessor | IAssemblyRefOS | IFile | IExportedType | IManifestResource | INestedClass | IGenericParam | IMethodSpec | IGenericParamConstraint (* reserved metas *) | IR0x2D | IR0x2E | IR0x2F | IR0x30 | IR0x31 | IR0x32 | IR0x33 | IR0x34 | IR0x35 | IR0x36 | IR0x37 | IR0x38 | IR0x39 | IR0x3A | IR0x3B | IR0x3C | IR0x3D | IR0x3E | IR0x3F (* coded tokens *) | ITypeDefOrRef | IHasConstant | IHasCustomAttribute | IHasFieldMarshal | IHasDeclSecurity | IMemberRefParent | IHasSemantics | IMethodDefOrRef | IMemberForwarded | IImplementation | ICustomAttributeType | IResolutionScope | ITypeOrMethodDef type meta_pointer = clr_meta_idx * rid (* generic reference to the meta table *) (* starting with all annotations of special coded types *) type type_def_or_ref = clr_meta and has_const = clr_meta and has_custom_attribute = clr_meta and has_field_marshal = clr_meta and has_decl_security = clr_meta and member_ref_parent = clr_meta and has_semantics = clr_meta and method_def_or_ref = clr_meta and member_forwarded = clr_meta and implementation = clr_meta and custom_attribute_type = clr_meta and resolution_scope = clr_meta and type_or_method_def = clr_meta and clr_meta = | Module of meta_module (* the current module descriptor *) | TypeRef of meta_type_ref (* class reference descriptors *) | TypeDef of meta_type_def (* class or interface definition descriptors *) | FieldPtr of meta_field_ptr (* a class-to-fields lookup table - does not exist in optimized metadatas *) | Field of meta_field (* field definition descriptors *) | MethodPtr of meta_method_ptr (* a class-to-methods lookup table - does not exist in optimized metadatas *) | Method of meta_method (* method definition descriptors *) | ParamPtr of meta_param_ptr (* a method-to-parameters lookup table - does not exist in optimized metadatas *) | Param of meta_param (* parameter definition descriptors *) | InterfaceImpl of meta_interface_impl (* interface implementation descriptors *) | MemberRef of meta_member_ref (* member (field or method) reference descriptors *) | Constant of meta_constant (* constant value that map the default values stored in the #Blob stream to *) (* respective fields, parameters and properties *) | CustomAttribute of meta_custom_attribute (* custom attribute descriptors *) | FieldMarshal of meta_field_marshal (* field or parameter marshaling descriptors for managed/unmanaged interop *) | DeclSecurity of meta_decl_security (* security descriptors *) | ClassLayout of meta_class_layout (* class layout descriptors that hold information about how the loader should lay out respective classes *) | FieldLayout of meta_field_layout (* field layout descriptors that specify the offset or oridnal of individual fields *) | StandAloneSig of meta_stand_alone_sig (* stand-alone signature descriptors. used in two capacities: *) (* as composite signatures of local variables of methods *) (* and as parameters of the call indirect (calli) IL instruction *) | EventMap of meta_event_map (* a class-to-events mapping table. exists also in optimized metadatas *) | EventPtr of meta_event_ptr (* an event map-to-events lookup table - does not exist in optimized metadata *) | Event of meta_event (* event descriptors *) | PropertyMap of meta_property_map (* a class-to-properties mapping table. exists also in optimized metadatas *) | PropertyPtr of meta_property_ptr (* a property map-to-properties lookup table - does not exist in optimized metadata *) | Property of meta_property (* property descriptors *) | MethodSemantics of meta_method_semantics (* method semantics descriptors that hold information about which method is associated *) (* with a specific property or event and in what capacity *) | MethodImpl of meta_method_impl (* method implementation descriptors *) | ModuleRef of meta_module_ref (* module reference descriptors *) | TypeSpec of meta_type_spec (* Type specification descriptors *) | ImplMap of meta_impl_map (* implementation map descriptors used for platform invocation (P/Invoke) *) | FieldRVA of meta_field_rva (* field-to-data mapping descriptors *) | ENCLog of meta_enc_log (* edit-and-continue log descriptors that hold information about what changes *) (* have been made to specific metadata items during in-memory editing *) (* this table does not exist on optimized metadata *) | ENCMap of meta_enc_map (* edit-and-continue mapping descriptors. does not exist on optimized metadata *) | Assembly of meta_assembly (* the current assembly descriptor, which should appear only in the prime module metadata *) | AssemblyProcessor of meta_assembly_processor | AssemblyOS of meta_assembly_os (* unused *) | AssemblyRef of meta_assembly_ref (* assembly reference descriptors *) | AssemblyRefProcessor of meta_assembly_ref_processor | AssemblyRefOS of meta_assembly_ref_os (* unused *) | File of meta_file (* file descriptors that contain information about other files in the current assembly *) | ExportedType of meta_exported_type (* exported type descriptors that contain information about public classes *) (* exported by the current assembly, which are declared in other modules of the assembly *) (* only the prime module of the assembly should carry this table *) | ManifestResource of meta_manifest_resource (* managed resource descriptors *) | NestedClass of meta_nested_class (* nested class descriptors that provide mapping of nested classes to their respective enclosing classes *) | GenericParam of meta_generic_param (* type parameter descriptors for generic classes and methods *) | MethodSpec of meta_method_spec (* generic method instantiation descriptors *) | GenericParamConstraint of meta_generic_param_constraint (* descriptors of constraints specified for type parameters of generic classes and methods *) | UnknownMeta of int (* all fields here need to be mutable, as they will first be initialized empty *) and meta_root = { root_id : int; } and meta_root_ptr = { ptr_id : int; ptr_to : meta_root; } and meta_module = { mutable md_id : int; mutable md_generation : int; mutable md_name : id; mutable md_vid : guid; mutable md_encid : guid; mutable md_encbase_id : guid; } and meta_type_ref = { mutable tr_id : int; mutable tr_resolution_scope : resolution_scope; mutable tr_name : id; mutable tr_namespace : ns; } and meta_type_def = { mutable td_id : int; mutable td_flags : type_def_flags; mutable td_name : id; mutable td_namespace : ns; mutable td_extends : type_def_or_ref option; mutable td_field_list : meta_field list; mutable td_method_list : meta_method list; (* extra field *) mutable td_extra_enclosing : meta_type_def option; } and meta_field_ptr = { mutable fp_id : int; mutable fp_field : meta_field; } and meta_field = { mutable f_id : int; mutable f_flags : field_flags; mutable f_name : id; mutable f_signature : ilsig; } and meta_method_ptr = { mutable mp_id : int; mutable mp_method : meta_method; } and meta_method = { mutable m_id : int; mutable m_rva : rva; mutable m_flags : method_flags; mutable m_name : id; mutable m_signature : ilsig; mutable m_param_list : meta_param list; (* rid: Param *) (* extra field *) mutable m_declaring : meta_type_def option; } and meta_param_ptr = { mutable pp_id : int; mutable pp_param : meta_param; } and meta_param = { mutable p_id : int; mutable p_flags : param_flags; mutable p_sequence : int; (* 0 means return value *) mutable p_name : id; } and meta_interface_impl = { mutable ii_id : int; mutable ii_class : meta_type_def; (* TypeDef rid *) mutable ii_interface : type_def_or_ref; } and meta_member_ref = { mutable memr_id : int; mutable memr_class : member_ref_parent; mutable memr_name : id; mutable memr_signature : ilsig; } and meta_constant = { mutable c_id : int; mutable c_type : constant_type; mutable c_parent : has_const; mutable c_value : constant; } and named_attribute = bool * string * instance (* is_property * name * instance *) and meta_custom_attribute = { mutable ca_id : int; mutable ca_parent : has_custom_attribute; mutable ca_type : custom_attribute_type; mutable ca_value : (instance list * named_attribute list) option; (* can be 0 *) } and meta_field_marshal = { mutable fm_id : int; mutable fm_parent : has_field_marshal; mutable fm_native_type : nativesig; } and meta_decl_security = { mutable ds_id : int; mutable ds_action : action_security; mutable ds_parent : has_decl_security; mutable ds_permission_set : blobref; (* an xml with the permission set *) } and meta_class_layout = { mutable cl_id : int; mutable cl_packing_size : int; (* power of two; from 1 through 128 *) mutable cl_class_size : int; mutable cl_parent : meta_type_def; (* TypeDef rid *) } and meta_field_layout = { mutable fl_id : int; mutable fl_offset : int; (* offset in bytes or ordinal *) mutable fl_field : meta_field; (* Field rid *) } and meta_stand_alone_sig = { mutable sa_id : int; mutable sa_signature : ilsig; } and meta_event_map = { mutable em_id : int; mutable em_parent : meta_type_def; (* TypeDef rid *) mutable em_event_list : meta_event list; (* Event rid *) } and meta_event_ptr = { mutable ep_id : int; mutable ep_event : meta_event; (* Event rid *) } and meta_event = { mutable e_id : int; mutable e_flags : event_flags; mutable e_name : stringref; mutable e_event_type : type_def_or_ref; } and meta_property_map = { mutable pm_id : int; mutable pm_parent : meta_type_def; (* TypeDef rid *) mutable pm_property_list : meta_property list; (* Property rid *) } and meta_property_ptr = { mutable prp_id : int; mutable prp_property : meta_property; (* Property rid *) } and meta_property = { mutable prop_id : int; mutable prop_flags : property_flags; mutable prop_name : stringref; mutable prop_type : ilsig; } and meta_method_semantics = { mutable ms_id : int; mutable ms_semantic : semantic_flags; mutable ms_method : meta_method; (* Method rid *) mutable ms_association : has_semantics; } and meta_method_impl = { mutable mi_id : int; mutable mi_class : meta_type_def; (* TypeDef rid *) mutable mi_method_body : method_def_or_ref; (* overriding method *) mutable mi_method_declaration : method_def_or_ref; (* overridden method *) } and meta_module_ref = { mutable modr_id : int; mutable modr_name : stringref; } and meta_type_spec = { mutable ts_id : int; mutable ts_signature : ilsig; } (* reserved ? *) and meta_enc_log = { mutable el_id : int; mutable el_token : to_det; mutable el_func_code : to_det; } and meta_impl_map = { mutable im_id : int; mutable im_flags : impl_flags; (* mapping_flags *) mutable im_forwarded : member_forwarded; (* method only *) mutable im_import_name : stringref; mutable im_import_scope : meta_module_ref; (* ModuleRef rid *) } (* reserved ? *) and meta_enc_map = { mutable encm_id : int; mutable encm_token : to_det; } and meta_field_rva = { mutable fr_id : int; mutable fr_rva : rva; mutable fr_field : meta_field; (* Field rid *) } and meta_assembly = { mutable a_id : int; mutable a_hash_algo : hash_algo; mutable a_major : int; mutable a_minor : int; mutable a_build : int; mutable a_rev : int; mutable a_flags : assembly_flags; (* assembly_flags *) mutable a_public_key : blobref; mutable a_name : stringref; mutable a_locale : stringref; } (* unused *) and meta_assembly_processor = { mutable ap_id : int; mutable ap_processor : to_det; } (* unused *) and meta_assembly_os = { mutable aos_id : int; mutable aos_platform_id : to_det; mutable aos_major_version : to_det; mutable aos_minor_version : to_det; } and meta_assembly_ref = { mutable ar_id : int; mutable ar_major : int; mutable ar_minor : int; mutable ar_build : int; mutable ar_rev : int; mutable ar_flags : assembly_flags; mutable ar_public_key : blobref; mutable ar_name : stringref; (* no path, no extension *) mutable ar_locale : stringref; mutable ar_hash_value : blobref; } (* unused *) and meta_assembly_ref_processor = { mutable arp_id : int; mutable arp_processor : to_det; mutable arp_assembly_ref : meta_assembly_ref; (* AssemblyRef rid *) } (* unused *) and meta_assembly_ref_os = { mutable aros_id : int; mutable aros_platform_id : to_det; mutable aros_major : int; mutable aros_minor : int; mutable aros_assembly_ref : meta_assembly_ref; (* AssemblyRef rid *) } and meta_file = { mutable file_id : int; mutable file_flags : file_flag; (* file_flags *) mutable file_name : stringref; (* no path; only file name *) mutable file_hash_value : blobref; } and meta_exported_type = { mutable et_id : int; mutable et_flags : type_def_flags; mutable et_type_def_id : int; (* TypeDef token in another module *) mutable et_type_name : stringref; mutable et_type_namespace : ns; mutable et_implementation : implementation; } and meta_manifest_resource = { mutable mr_id : int; mutable mr_offset : int; mutable mr_flags : manifest_resource_flag; (* manifest_resource_flags *) mutable mr_name : stringref; mutable mr_implementation : implementation option; } and meta_nested_class = { mutable nc_id : int; mutable nc_nested : meta_type_def; (* TypeDef rid *) mutable nc_enclosing : meta_type_def; (* TypeDef rid *) } and meta_generic_param = { mutable gp_id : int; mutable gp_number : int; (* ordinal *) mutable gp_flags : generic_flags; mutable gp_owner : type_or_method_def; (* generic type or method *) mutable gp_name : stringref option; } and meta_method_spec = { mutable mspec_id : int; mutable mspec_method : method_def_or_ref; (* instantiated method *) mutable mspec_instantiation : ilsig; (* instantiated signature *) } and meta_generic_param_constraint = { mutable gc_id : int; mutable gc_owner : meta_generic_param; (* GenericParam rid *) (* constrained parameter *) mutable gc_constraint : type_def_or_ref; (* type the parameter must extend or implement *) } and to_det = int and not_implemented = int and constant = | IBool of bool | IChar of int | IByte of int | IShort of int | IInt of int32 | IInt64 of int64 | IFloat32 of float | IFloat64 of float | IString of string | INull and instance = | InstConstant of constant | InstBoxed of instance | InstType of string | InstArray of instance list | InstEnum of int and constant_type = | CBool (* 0x2 *) | CChar (* 0x3 *) | CInt8 (* 0x4 *) | CUInt8 (* 0x5 *) | CInt16 (* 0x6 *) | CUInt16 (* 0x7 *) | CInt32 (* 0x8 *) | CUInt32 (* 0x9 *) | CInt64 (* 0xA *) | CUInt64 (* 0xB *) | CFloat32 (* 0xC *) | CFloat64 (* 0xD *) | CString (* 0xE *) | CNullRef (* 0x12 *) (* null object reference - the value of the constant *) (* of this type must be a 4-byte integer containing 0 *) and type_def_vis = (* visibility flags - mask 0x7 *) | VPrivate (* 0x0 *) (* type is not visible outside the assembly. default *) | VPublic (* 0x1 *) (* type visible outside the assembly *) | VNestedPublic (* 0x2 *) (* the nested type has public visibility *) | VNestedPrivate (* 0x3 *) (* nested type has private visibility - it's not visible outside the enclosing class *) | VNestedFamily (* 0x4 *) (* nested type has family visibility - it's visible to descendants of the enclosing class only *) | VNestedAssembly (* 0x5 *) (* nested type visible within the assembly only *) | VNestedFamAndAssem (* 0x6 *) (* nested type is visible to the descendants of the enclosing class residing in the same assembly *) | VNestedFamOrAssem (* 0x7 *) (* nested type is visible to the descendants of the enclosing class either within *) (* or outside the assembly and to every type within the assembly *) and type_def_layout = (* layout flags - mask 0x18 *) | LAuto (* 0x0 *) (* type fields are laid out automatically *) | LSequential (* 0x8 *) (* loader must preserve the order of the instance fields *) | LExplicit (* 0x10 *) (* type layout is specified explicitly *) and type_def_semantics = (* semantics flags - mask 0x5A0 *) | SInterface (* 0x20 *) (* type is an interface. If specified, the default parent is set to nil *) | SAbstract (* 0x80 *) | SSealed (* 0x100 *) | SSpecialName (* 0x400 *) (* type has a special name. how special depends on the name itself *) (* e.g. .ctor or .cctor *) and type_def_impl = (* type implementation flags - mask 0x103000 *) | IImport (* 0x1000 *) (* the type is imported from a COM type library *) | ISerializable (* 0x2000 *) (* the type can be serialized into sequential data *) | IBeforeFieldInit (* 0x00100000 *) (* the type can be initialized any time before the first access *) (* to a static field. *) and type_def_string = (* string formatting flags - mask 0x00030000 *) | SAnsi (* 0x0 *) (* managed strings are marshaled to and from ANSI strings *) | SUnicode (* 0x00010000 *) (* managed strings are marshaled to and from UTF-16 *) | SAutoChar (* 0x00020000 *) (* marshaling is defined by the underlying platform *) and type_def_flags = { tdf_vis : type_def_vis; tdf_layout : type_def_layout; tdf_semantics : type_def_semantics list; tdf_impl : type_def_impl list; tdf_string : type_def_string; } and field_access = (* access flags - mask 0x07 *) | FAPrivateScope (* 0x0 *) (* default - exempt from the requirement of having a unique triad of owner, name and signature *) (* so it must always be referenced by a FieldDef token and never by a MemberRef *) (* privatescope fields are accessible from anywhere within the current module *) | FAPrivate (* 0x1 *) (* field is accessible from its owner and from classes nested in the field's owner. *) (* global private fields are accessible from anywhere within current module *) | FAFamAndAssem (* 0x2 *) (* accessible from types belonging to the owner's family defined in the current assembly *) (* family means the type itself and all its descendants *) | FAAssembly (* 0x3 *) (* accessible from types defined in the current assembly *) | FAFamily (* 0x4 *) (* accessible from the owner's family - defined in this or any other assembly *) | FAFamOrAssem (* 0x5 *) (* accessible from the owner's family and from all types defined in the current assembly *) | FAPublic (* 0x6 *) (* field is accessible from any type *) and field_contract = (* contract flags - mask 0x02F0 *) | CStatic (* 0x10 *) (* static field. global fields must be static *) | CInitOnly (* 0x20 *) (* field can be initialized only and cannot be written to later. *) (* Initialization takes place in an instance constructor (.ctor) for instance fields *) (* and in a class constructor (.cctor) for static fields. *) (* this flag is not enforced by the CLR *) | CLiteral (* 0x40 *) (* field is a compile-time constant. the loader does not lay out this field *) (* and does not create an internal handle for it *) (* it cannot be directly addressed from IL and can only be used as a Reflection reference *) | CNotSerialized (* 0x80 *) (* field is not serialized when the owner is remoted *) | CSpecialName (* 0x200 *) (* the field is special in some way, as defined by its name *) (* example is the field value__ of an enumeration type *) and field_reserved = (* reserved flags - cannot be set explicitly. mask 0x9500 *) | RSpecialName (* 0x400 *) (* has a special name that is reserved for internal use of the CLR *) (* two field names are reserved: value_, for instance fields in enumerations *) (* and _Deleted* for fields marked for deletion but not actually removed from metadata *) | RMarshal (* 0x1000 *) (* The field has an associated FieldMarshal record specifying how the field must be *) (* marshaled when consumed by unmanaged code. *) | RConstant (* 0x8000 *) (* field has an associated Constant record *) | RFieldRVA (* 0x0100 *) (* field is mapped to data and has an associated FieldRVA record *) and field_flags = { ff_access : field_access; ff_contract : field_contract list; ff_reserved : field_reserved list; } and method_contract = (* contract flags - mask 0xF0 *) | CMStatic (* 0x10 *) | CMFinal (* 0x20 *) (* must be paired with the virtual flag - otherwise it is meaningless *) | CMVirtual (* 0x40 *) | CMHideBySig (* 0x80 *) (* the method hides all methods of the parent classes that have a matching *) (* signature and name (as opposed to having a matching name only). ignored by the CLR *) and method_vtable = (* vtable flags - mask 0x300 *) | VNewSlot (* 0x100 *) (* a new vtable slot is created, so it doesn't override the old implementation *) | VStrict (* 0x200 *) (* virtual method can be overridden only if it is accessible from the overriding class *) and method_impl = (* implementation flags - mask 0x2C08 *) | IAbstract (* 0x0400 *) | ISpecialName (* 0x0800 *) | IPInvokeImpl (* 0x2000 *) (* the method has an unmanaged implementation and is called through the platform *) (* invocation mechanism. the rva field must be 0, since the method is implemented externally *) | IUnmanagedExp (* 0x0008 *) (* the managed method is exposed as an unmanaged export. not used by the CLR currently *) and method_reserved = (* reserved flags - cannot be set explicitly. mask 0xD000 *) | RTSpecialName (* 0x1000 *) (* has a special name: .ctor, .cctor, _VtblGap* and _Deleted* *) | RHasSecurity (* 0x4000 *) (* either has an associated DeclSecurity metadata or the custom attribte *) (* System.Security.SuppressUnmanagedCodeSecurityAttribute *) | RReqSecObj (* 0x8000 *) (* this method calls another method containing security code, so it requires *) (* an additional stack slot for a security object. *) and method_code_type = (* code type - mask 0x3 *) | CCil (* 0x0 *) | CNative (* 0x1 *) (* implemented in native platform-specific code *) | COptIl (* 0x2 *) (* optimized il - not supported; must not be set *) | CRuntime (* 0x3 *) (* automatically generated by the runtime itself (intrinsic) *) and method_code_mngmt = (* code management - mask 0x4 *) | MManaged (* 0x0 *) | MUnmanaged (* 0x4 *) (* must be paired with the native flag *) and method_interop = (* method implementation and interop - mask 0x10D8 *) | OForwardRef (* 0x10 *) (* managed object fiels and edit-and-continue scenarios only *) | OPreserveSig (* 0x80 *) (* method signature must not be mangled during interop with classic COM code *) | OInternalCall (* 0x1000 *) (* reserved for internal use. if set, RVA must be 0 *) | OSynchronized (* 0x20 *) (* automatically insert code to take a lock on entry to the method and release it *) (* on exit from the method. Value types cannot have this flag set *) | ONoInlining (* 0x08 *) (* the runtime is not allowed to inline the method *) and method_flags = { mf_access : field_access; mf_contract : method_contract list; mf_vtable : method_vtable list; mf_impl : method_impl list; mf_reserved : method_reserved list; mf_code_type : method_code_type; mf_code_mngmt : method_code_mngmt; mf_interop : method_interop list; } and param_io = (* input/output flags - mask 0x13 *) | PIn (* 0x1 *) | POut (* 0x2 *) | POpt (* 0x10 *) and param_reserved = (* reserved flags - mask 0xF000 *) | PHasConstant (* 0x1000 *) (* the parameter has an associated Constant record *) | PMarshal (* 0x2000 *) (* the parameter has an associated FieldMarshal record specifying how the parameter *) (* must be marshaled when consumed by unmanaged code *) and param_flags = { pf_io : param_io list; pf_reserved : param_reserved list; } and event_flag = | ESpecialName (* 0x0200 *) (* event is special *) | ERTSpecialName (* 0x0400 *) (* CLI provides special behavior, depending on the name of the event *) and event_flags = event_flag list and property_flag = | PSpecialName (* 0x0200 *) (* property is special *) | PRTSpecialName (* 0x0400 *) (* runtime (intrinsic) should check name encoding *) | PHasDefault (* 0x1000 *) (* property has default *) | PUnused (* 0xE9FF *) (* reserved *) and property_flags = property_flag list and semantic_flag = | SSetter (* 0x0001 *) (* setter for property *) | SGetter (* 0x0002 *) (* getter for property *) | SOther (* 0x0004 *) (* other method for property or event *) | SAddOn (* 0x0008 *) (* addon method for event - refers to the required add_ method for events *) | SRemoveOn (* 0x0010 *) (* removeon method for event - refers to the required remove_ method for events *) | SFire (* 0x0020 *) (* fire method for event. this refers to the optional raise_ method for events *) and semantic_flags = semantic_flag list and action_security = | SecNull | SecRequest (* 0x1 *) | SecDemand (* 0x2 *) | SecAssert (* 0x3 *) | SecDeny (* 0x4 *) | SecPermitOnly (* 0x5 *) | SecLinkCheck (* 0x6 *) | SecInheritCheck (* 0x7 *) | SecReqMin (* 0x8 *) | SecReqOpt (* 0x9 *) | SecReqRefuse (* 0xA *) | SecPreJitGrant (* 0xB *) | SecPreJitDeny (* 0xC *) | SecNonCasDemand (* 0xD *) | SecNonCasLinkDemand (* 0xE *) | SecNonCasInheritance (* 0xF *) and impl_charset = | IDefault (* 0x0 *) | IAnsi (* 0x2 *) (* method parameters of type string must be marshaled as ANSI zero-terminated *) (* strings unless explicitly specified otherwise *) | IUnicode (* 0x4 *) (* method parameters of type string must be marshaled as Unicode strings *) | IAutoChar (* 0x6 *) (* method parameters of type string must be marshaled as ANSI or Unicode strings *) (* depending on the platform *) and impl_callconv = | IDefaultCall (* 0x0 *) | IWinApi (* 0x100 *) (* the native method uses the calling convention standard for the underlying platform *) | ICDecl (* 0x200 *) (* the native method uses the C/C++ style calling convention *) | IStdCall (* 0x300 *) (* native method uses the standard Win32 API calling convention *) | IThisCall (* 0x400 *) (* native method uses the C++ member method (non-vararg) calling convention *) | IFastCall (* 0x500 *) and impl_flag = | INoMangle (* 0x1 *) (* exported method's name must be matched literally *) | IBestFit (* 0x10 *) (* allow "best fit" guessing when converting the strings *) | IBestFitOff (* 0x20 *) (* disallow "best fit" guessing *) | ILastErr (* 0x40 *) (* the native method supports the last error querying by the Win32 API GetLastError *) | ICharMapError (* 0x1000 *) (* throw an exception when an unmappable character is encountered in a string *) | ICharMapErrorOff (* 0x2000 *) (* don't throw an exception when an unmappable character is encountered *) and impl_flags = { if_charset : impl_charset; if_callconv : impl_callconv; if_flags : impl_flag list; } and hash_algo = | HNone (* 0x0 *) | HReserved (* 0x8003 *) (* MD5 ? *) | HSha1 (* 0x8004 *) (* SHA1 *) and assembly_flag = | APublicKey (* 0x1 *) (* assembly reference holds the full (unhashed) public key *) | ARetargetable (* 0x100 *) (* implementation of this assembly used at runtime is not expected to match *) (* the version seen at compile-time *) | ADisableJitCompileOptimizer (* 0x4000 *) (* Reserved *) | AEnableJitCompileTracking (* 0x8000 *) (* Reserved *) and assembly_flags = assembly_flag list and file_flag = | ContainsMetadata (* 0x0 *) | ContainsNoMetadata (* 0x1 *) and manifest_resource_flag = (* mask 0x7 *) | RNone (* 0x0 *) | RPublic (* 0x1 *) | RPrivate (* 0x2 *) and generic_variance = (* mask 0x3 *) | VNone (* 0x0 *) | VCovariant (* 0x1 *) | VContravariant (* 0x2 *) and generic_constraint = (* mask 0x1C *) | CInstanceType (* 0x4 *) (* generic parameter has the special class constraint *) | CValueType (* 0x8 *) (* generic parameter has the special valuetype constraint *) | CDefaultCtor (* 0x10 *) (* has the special .ctor constraint *) and generic_flags = { gf_variance : generic_variance; gf_constraint : generic_constraint list; } and ilsig = (* primitive types *) | SVoid (* 0x1 *) | SBool (* 0x2 *) | SChar (* 0x3 *) | SInt8 (* 0x4 *) | SUInt8 (* 0x5 *) | SInt16 (* 0x6 *) | SUInt16 (* 0x7 *) | SInt32 (* 0x8 *) | SUInt32 (* 0x9 *) | SInt64 (* 0xA *) | SUInt64 (* 0xB *) | SFloat32 (* 0xC *) | SFloat64 (* 0xD *) | SString (* 0xE *) | SPointer of ilsig (* 0xF *) (* unmanaged pointer to type ( * ) *) | SManagedPointer of ilsig (* 0x10 *) (* managed pointer to type ( & ) *) | SValueType of type_def_or_ref (* 0x11 *) (* a value type modifier, followed by TypeDef or TypeRef token *) | SClass of type_def_or_ref (* 0x12 *) (* a class type modifier, followed by TypeDef or TypeRef token *) | STypeParam of int (* 0x13 *) (* generic parameter in a generic type definition. represented by a number *) | SArray of ilsig * (int option * int option) array (* 0x14 *) (* ilsig * ( bound * size ) *) (* a multi-dimensional array type modifier *) (* encoded like: *) (* SArray ... ... *) (* is the number of dimensions (K>0) *) (* num of specified sizes for dimensions (N <= K) *) (* num of lower bounds (M <= K) *) (* all int values are compressed *) | SGenericInst of ilsig * (ilsig list) (* 0x15 *) (* A generic type instantiation. encoded like: *) (* SGenericInst ... *) | STypedReference (* 0x16 *) (* typed reference, carrying both a reference to a type *) (* and information identifying the referenced type *) | SIntPtr (* 0x18 *) (* pointer-sized managed integer *) | SUIntPtr (* 0x19 *) (* pointer-size managed unsigned integer *) (* | SNativeFloat (* 0x1A *) *) (* refer to http://stackoverflow.com/questions/13961205/native-float-type-usage-in-clr *) | SFunPtr of callconv list * ilsig * (ilsig list) (* 0x1B *) (* a pointer to a function, followed by full method signature *) | SObject (* 0x1C *) (* System.Object *) | SVector of ilsig (* 0x1D *) (* followed by the encoding of the underlying type *) | SMethodTypeParam of int (* 0x1E *) (* generic parameter in a generic method definition *) | SReqModifier of type_def_or_ref * ilsig (* 0x1F *) (* modreq: required custom modifier : indicate that the item to which they are attached *) (* must be treated in a special way *) | SOptModifier of type_def_or_ref * ilsig (* 0x20 *) (* modopt: optional custom modifier *) | SSentinel (* 0x41 *) (* ... - signifies the beginning of optional arguments supplied for a vararg method call *) (* This can only appear at call site, since varargs optional parameters are not specified *) (* when a method is declared *) | SPinned of ilsig (* 0x45 *) (* pinned reference: it's only applicable to local variables only *) (* special undocumented (yay) *) | SType (* 0x50 *) | SBoxed (* 0x51 *) | SEnum of string (* 0x55 *) and callconv = | CallDefault (* 0x0 *) | CallCDecl (* 0x1 *) | CallStdCall (* 0x2 *) | CallThisCall (* 0x3 *) | CallFastCall (* 0x4 *) | CallVararg (* 0x5 *) | CallField (* 0x6 *) (* field call *) | CallLocal (* 0x7 *) (* local variable call *) | CallProp (* 0x8 *) (* property call *) | CallUnmanaged (* 0x9 *) (* unmanaged calling convention. not used *) | CallGenericInst (* 0xA *) (* generic instantiation - MethodSpec *) | CallGeneric of int (* 0x10 *) (* also contains the number of generic arguments *) | CallHasThis (* 0x20 *) (* instance method that has an instance pointer (this) *) (* as an implicit first argument - ilasm 'instance' *) | CallExplicitThis (* 0x40 *) (* the first explicitly specified parameter is the instance pointer *) (* ilasm 'explicit' *) and nativesig = | NVoid (* 0x01 *) (* obsolete *) | NBool (* 0x02 *) | NInt8 (* 0x03 *) | NUInt8 (* 0x4 *) | NInt16 (* 0x5 *) | NUInt16 (* 0x6 *) | NInt32 (* 0x7 *) | NUInt32 (* 0x8 *) | NInt64 (* 0x9 *) | NUInt64 (* 0xA *) | NFloat32 (* 0xB *) | NFloat64 (* 0xC *) | NSysChar (* 0xD *) (* obsolete *) | NVariant (* 0xE *) (* obsolete *) | NCurrency (* 0xF *) | NPointer (* 0x10 *) (* obsolete - use NativeInt *) | NDecimal (* 0x11 *) (* obsolete *) | NDate (* 0x12 *) (* obsolete *) | NBStr (* 0x13 *) (* unicode VB-style: used in COM operations *) | NLPStr (* 0x14 *) (* pointer to a zero-terminated ANSI string *) | NLPWStr (* 0x15 *) (* pointer to a zero-terminated Unicode string *) | NLPTStr (* 0x16 *) (* pointer to a zero-terminated ANSI or Unicode string - depends on platform *) | NFixedString of int (* 0x17 *) (* fixed-size system string of size bytes; applicable to field marshalling only *) | NObjectRef (* 0x18 *) (* obsolete *) | NUnknown (* 0x19 *) (* IUnknown interface pointer *) | NDispatch (* 0x1A *) (* IDispatch interface pointer *) | NStruct (* 0x1B *) (* C-style structure, for marshaling the formatted managed types *) | NInterface (* 0x1C *) (* interface pointer *) | NSafeArray of variantsig (* 0x1D *) (* safe array of type *) | NFixedArray of int * variantsig (* 0x1E *) (* fixed-size array, of size bytes *) | NIntPointer (* 0x1F *) (* signed pointer-size integer *) | NUIntPointer (* 0x20 *) (* unsigned pointer-sized integer *) | NNestedStruct (* 0x21 *) (* obsolete *) | NByValStr (* 0x22 *) (* VB-style string in a fixed-length buffer *) | NAnsiBStr (* 0x23 *) (* ansi bstr - ANSI VB-style string *) | NTBStr (* 0x24 *) (* tbstr - bstr or ansi bstr, depending on the platform *) | NVariantBool (* 0x25 *) (* variant bool - 2-byte Boolean: true = -1; false = 0 *) | NFunctionPtr (* 0x26 *) | NAsAny (* 0x28 *) (* as any - object: type defined at run time (?) *) | NArray of nativesig * int * int * int (* 0x2A *) (* fixed-size array of a native type *) (* if size is empty, the size of the native array is derived from the size *) (* of the managed type being marshaled *) | NLPStruct (* 0x2B *) (* pointer to a c-style structure *) | NCustomMarshaler of string * string (* 0x2C *) (* custom (, ) *) | NError (* 0x2D *) (* maps in32 to VT_HRESULT *) | NCustom of int and variantsig = | VT_EMPTY (* 0x00 *) (* No *) | VT_NULL (* 0x01 *) (* No null *) | VT_I2 (* 0x02 *) (* Yes int16 *) | VT_I4 (* 0x03 *) (* Yes int32 *) | VT_R4 (* 0x04 *) (* Yes float32 *) | VT_R8 (* 0x05 *) (* Yes float64 *) | VT_CY (* 0x06 *) (* Yes currency *) | VT_DATE (* 0x07 *) (* Yes date *) | VT_BSTR (* 0x08 *) (* Yes bstr *) | VT_DISPATCH (* 0x09 *) (* Yes idispatch *) | VT_ERROR (* 0x0A *) (* Yes error *) | VT_BOOL (* 0x0B *) (* Yes bool *) | VT_VARIANT (* 0x0C *) (* Yes variant *) | VT_UNKNOWN (* 0x0D *) (* Yes iunknown *) | VT_DECIMAL (* 0x0E *) (* Yes decimal *) | VT_I1 (* 0x10 *) (* Yes int8 *) | VT_UI1 (* 0x11 *) (* Yes unsigned int8, uint8 *) | VT_UI2 (* 0x12 *) (* Yes unsigned int16, uint16 *) | VT_UI4 (* 0x13 *) (* Yes unsigned int32, uint32 *) | VT_I8 (* 0x14 *) (* No int64 *) | VT_UI8 (* 0x15 *) (* No unsigned int64, uint64 *) | VT_INT (* 0x16 *) (* Yes int *) | VT_UINT (* 0x17 *) (* Yes unsigned int, uint *) | VT_VOID (* 0x18 *) (* No void *) | VT_HRESULT (* 0x19 *) (* No hresult *) | VT_PTR (* 0x1A *) (* No * *) | VT_SAFEARRAY (* 0x1B *) (* No safearray *) | VT_CARRAY (* 0x1C *) (* No carray *) | VT_USERDEFINED (* 0x1D *) (* No userdefined *) | VT_LPSTR (* 0x1E *) (* No lpstr *) | VT_LPWSTR (* 0x1F *) (* No lpwstr *) | VT_RECORD (* 0x24 *) (* Yes record *) | VT_FILETIME (* 0x40 *) (* No filetime *) | VT_BLOB (* 0x41 *) (* No blob *) | VT_STREAM (* 0x42 *) (* No stream *) | VT_STORAGE (* 0x43 *) (* No storage *) | VT_STREAMED_OBJECT (* 0x44 *) (* No streamed_object *) | VT_STORED_OBJECT (* 0x45 *) (* No stored_object *) | VT_BLOB_OBJECT (* 0x46 *) (* No blob_object *) | VT_CF (* 0x47 *) (* No cf *) | VT_CLSID (* 0x48 *) (* No clsid *) (* | VT_VECTOR of variantsig (* 0x1000 *) *) (* (* Yes vector *) *) (* | VT_ARRAY of variantsig (* 0x2000 *) *) (* (* Yes [ ] *) *) (* | VT_BYREF of variantsig (* 0x4000 *) *) (* (* Yes & *) *) haxe_4.2.4.orig/libs/ilib/ilMetaDebug.ml0000644000175000017500000000167014146064214017771 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open IlMeta;; open IlMetaTools;; let path_s = IlMetaTools.path_s let ilsig_s = IlMetaTools.ilsig_s let instance_s = IlMetaTools.instance_s haxe_4.2.4.orig/libs/ilib/ilMetaReader.ml0000644000175000017500000020761014146064214020147 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; open PeReader;; open IlMeta;; open IO;; open Printf;; open IlMetaTools;; open ExtString;; open IlData;; (* *) let get_field = function | Field f -> f | _ -> assert false let get_method = function | Method m -> m | _ -> assert false let get_param = function | Param p -> p | _ -> assert false let get_type_def = function | TypeDef p -> p | _ -> assert false let get_event = function | Event e -> e | _ -> assert false let get_property = function | Property p -> p | _ -> assert false let get_module_ref = function | ModuleRef r -> r | _ -> assert false let get_assembly_ref = function | AssemblyRef r -> r | _ -> assert false let get_generic_param = function | GenericParam p -> p | _ -> assert false (* decoding helpers *) let type_def_vis_of_int i = match i land 0x7 with (* visibility flags - mask 0x7 *) | 0x0 -> VPrivate (* 0x0 *) | 0x1 -> VPublic (* 0x1 *) | 0x2 -> VNestedPublic (* 0x2 *) | 0x3 -> VNestedPrivate (* 0x3 *) | 0x4 -> VNestedFamily (* 0x4 *) | 0x5 -> VNestedAssembly (* 0x5 *) | 0x6 -> VNestedFamAndAssem (* 0x6 *) | 0x7 -> VNestedFamOrAssem (* 0x7 *) | _ -> assert false let type_def_layout_of_int i = match i land 0x18 with (* layout flags - mask 0x18 *) | 0x0 -> LAuto (* 0x0 *) | 0x8 -> LSequential (* 0x8 *) | 0x10 -> LExplicit (* 0x10 *) | _ -> assert false let type_def_semantics_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* semantics flags - mask 0x5A0 *) | 0x20 -> SInterface (* 0x20 *) | 0x80 -> SAbstract (* 0x80 *) | 0x100 -> SSealed (* 0x100 *) | 0x400 -> SSpecialName (* 0x400 *) | _ -> assert false) :: acc else acc) [] [0x20;0x80;0x100;0x400] let type_def_impl_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* type implementation flags - mask 0x103000 *) | 0x1000 -> IImport (* 0x1000 *) | 0x2000 -> ISerializable (* 0x2000 *) | 0x00100000 -> IBeforeFieldInit (* 0x00100000 *) | _ -> assert false) :: acc else acc) [] [0x1000;0x2000;0x00100000] let type_def_string_of_int i = match i land 0x00030000 with (* string formatting flags - mask 0x00030000 *) | 0x0 -> SAnsi (* 0x0 *) | 0x00010000 -> SUnicode (* 0x00010000 *) | 0x00020000 -> SAutoChar (* 0x00020000 *) | _ -> assert false let type_def_flags_of_int i = { tdf_vis = type_def_vis_of_int i; tdf_layout = type_def_layout_of_int i; tdf_semantics = type_def_semantics_of_int i; tdf_impl = type_def_impl_of_int i; tdf_string = type_def_string_of_int i; } let null_type_def_flags = type_def_flags_of_int 0 let field_access_of_int i = match i land 0x07 with (* access flags - mask 0x07 *) | 0x0 -> FAPrivateScope (* 0x0 *) | 0x1 -> FAPrivate (* 0x1 *) | 0x2 -> FAFamAndAssem (* 0x2 *) | 0x3 -> FAAssembly (* 0x3 *) | 0x4 -> FAFamily (* 0x4 *) | 0x5 -> FAFamOrAssem (* 0x5 *) | 0x6 -> FAPublic (* 0x6 *) | _ -> assert false let field_contract_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* contract flags - mask 0x02F0 *) | 0x10 -> CStatic (* 0x10 *) | 0x20 -> CInitOnly (* 0x20 *) | 0x40 -> CLiteral (* 0x40 *) | 0x80 -> CNotSerialized (* 0x80 *) | 0x200 -> CSpecialName (* 0x200 *) | _ -> assert false) :: acc else acc) [] [0x10;0x20;0x40;0x80;0x200] let field_reserved_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* reserved flags - cannot be set explicitly. mask 0x9500 *) | 0x400 -> RSpecialName (* 0x400 *) | 0x1000 -> RMarshal (* 0x1000 *) | 0x8000 -> RConstant (* 0x8000 *) | 0x0100 -> RFieldRVA (* 0x0100 *) | _ -> assert false) :: acc else acc) [] [0x400;0x1000;0x8000;0x100] let field_flags_of_int i = { ff_access = field_access_of_int i; ff_contract = field_contract_of_int i; ff_reserved = field_reserved_of_int i; } let null_field_flags = field_flags_of_int 0 let method_contract_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* contract flags - mask 0xF0 *) | 0x10 -> CMStatic (* 0x10 *) | 0x20 -> CMFinal (* 0x20 *) | 0x40 -> CMVirtual (* 0x40 *) | 0x80 -> CMHideBySig (* 0x80 *) | _ -> assert false) :: acc else acc) [] [0x10;0x20;0x40;0x80] let method_vtable_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* vtable flags - mask 0x300 *) | 0x100 -> VNewSlot (* 0x100 *) | 0x200 -> VStrict (* 0x200 *) | _ -> assert false) :: acc else acc) [] [0x100;0x200] let method_impl_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* implementation flags - mask 0x2C08 *) | 0x0400 -> IAbstract (* 0x0400 *) | 0x0800 -> ISpecialName (* 0x0800 *) | 0x2000 -> IPInvokeImpl (* 0x2000 *) | 0x0008 -> IUnmanagedExp (* 0x0008 *) | _ -> assert false) :: acc else acc) [] [0x0400;0x0800;0x2000;0x0008] let method_reserved_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* reserved flags - cannot be set explicitly. mask 0xD000 *) | 0x1000 -> RTSpecialName (* 0x1000 *) | 0x4000 -> RHasSecurity (* 0x4000 *) | 0x8000 -> RReqSecObj (* 0x8000 *) | _ -> assert false) :: acc else acc) [] [0x1000;0x4000;0x8000] let method_code_type_of_int i = match i land 0x3 with | 0x0 -> CCil (* 0x0 *) | 0x1 -> CNative (* 0x1 *) | 0x2 -> COptIl (* 0x2 *) | 0x3 -> CRuntime (* 0x3 *) | _ -> assert false let method_code_mngmt_of_int i = match i land 0x4 with | 0x0 -> MManaged (* 0x0 *) | 0x4 -> MUnmanaged (* 0x4 *) | _ -> assert false let method_interop_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x10 -> OForwardRef (* 0x10 *) | 0x80 -> OPreserveSig (* 0x80 *) | 0x1000 -> OInternalCall (* 0x1000 *) | 0x20 -> OSynchronized (* 0x20 *) | 0x08 -> ONoInlining (* 0x08 *) | _ -> assert false) :: acc else acc) [] [0x10;0x80;0x1000;0x20;0x08] let method_flags_of_int iflags flags = { mf_access = field_access_of_int flags; mf_contract = method_contract_of_int flags; mf_vtable = method_vtable_of_int flags; mf_impl = method_impl_of_int flags; mf_reserved = method_reserved_of_int flags; mf_code_type = method_code_type_of_int iflags; mf_code_mngmt = method_code_mngmt_of_int iflags; mf_interop = method_interop_of_int iflags; } let null_method_flags = method_flags_of_int 0 0 let param_io_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* input/output flags - mask 0x13 *) | 0x1 -> PIn (* 0x1 *) | 0x2 -> POut (* 0x2 *) | 0x10 -> POpt (* 0x10 *) | _ -> assert false) :: acc else acc) [] [0x1;0x2;0x10] let param_reserved_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* reserved flags - mask 0xF000 *) | 0x1000 -> PHasConstant (* 0x1000 *) | 0x2000 -> PMarshal (* 0x2000 *) | _ -> assert false) :: acc else acc) [] [0x1000;0x2000] let param_flags_of_int i = { pf_io = param_io_of_int i; pf_reserved = param_reserved_of_int i; } let null_param_flags = param_flags_of_int 0 let callconv_of_int ?match_generic_inst:(match_generic_inst=false) i = let basic = match i land 0xF with | 0x0 -> CallDefault (* 0x0 *) | 0x1 -> CallCDecl | 0x2 -> CallStdCall | 0x3 -> CallThisCall | 0x4 -> CallFastCall | 0x5 -> CallVararg (* 0x5 *) | 0x6 -> CallField (* 0x6 *) | 0x7 -> CallLocal (* 0x7 *) | 0x8 -> CallProp (* 0x8 *) | 0x9 -> CallUnmanaged (* 0x9 *) | 0xa when match_generic_inst -> CallGenericInst (* 0xA *) | i -> printf "error 0x%x\n\n" i; assert false in match i land 0x20 with | 0x20 -> [CallHasThis;basic] | _ when i land 0x40 = 0x40 -> [CallExplicitThis;basic] | _ -> [basic] let event_flags_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x0200 -> ESpecialName (* 0x0200 *) | 0x0400 -> ERTSpecialName (* 0x0400 *) | _ -> assert false) :: acc else acc) [] [0x0200;0x0400] let property_flags_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x0200 -> PSpecialName (* 0x0200 *) | 0x0400 -> PRTSpecialName (* 0x0400 *) | 0x1000 -> PHasDefault (* 0x1000 *) | 0xE9FF -> PUnused (* 0xE9FF *) | _ -> assert false) :: acc else acc) [] [0x0200;0x0400;0x1000;0xE9FF] let semantic_flags_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x0001 -> SSetter (* 0x0001 *) | 0x0002 -> SGetter (* 0x0002 *) | 0x0004 -> SOther (* 0x0004 *) | 0x0008 -> SAddOn (* 0x0008 *) | 0x0010 -> SRemoveOn (* 0x0010 *) | 0x0020 -> SFire (* 0x0020 *) | _ -> assert false) :: acc else acc) [] [0x0001;0x0002;0x0004;0x0008;0x0010;0x0020] let impl_charset_of_int = function | 0x0 -> IDefault (* 0x0 *) | 0x2 -> IAnsi (* 0x2 *) | 0x4 -> IUnicode (* 0x4 *) | 0x6 -> IAutoChar (* 0x6 *) | _ -> assert false let impl_callconv_of_int = function | 0x0 -> IDefaultCall (* 0x0 *) | 0x100 -> IWinApi (* 0x100 *) | 0x200 -> ICDecl (* 0x200 *) | 0x300 -> IStdCall (* 0x300 *) | 0x400 -> IThisCall (* 0x400 *) | 0x500 -> IFastCall (* 0x500 *) | _ -> assert false let impl_flag_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x1 -> INoMangle (* 0x1 *) | 0x10 -> IBestFit (* 0x10 *) | 0x20 -> IBestFitOff (* 0x20 *) | 0x40 -> ILastErr (* 0x40 *) | 0x1000 -> ICharMapError (* 0x1000 *) | 0x2000 -> ICharMapErrorOff (* 0x2000 *) | _ -> assert false) :: acc else acc) [] [0x1;0x10;0x20;0x40;0x1000;0x2000] let impl_flags_of_int i = { if_charset = impl_charset_of_int (i land 0x6); if_callconv = impl_callconv_of_int (i land 0x700); if_flags = impl_flag_of_int i; } let null_impl_flags = impl_flags_of_int 0 let assembly_flags_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x1 -> APublicKey (* 0x1 *) | 0x100 -> ARetargetable (* 0x100 *) | 0x4000 -> ADisableJitCompileOptimizer (* 0x4000 *) | 0x8000 -> AEnableJitCompileTracking (* 0x8000 *) | _ -> assert false) :: acc else acc) [] [0x1;0x100;0x4000;0x8000] let hash_algo_of_int = function | 0x0 -> HNone (* 0x0 *) | 0x8003 -> HReserved (* 0x8003 *) | 0x8004 -> HSha1 (* 0x8004 *) | _ -> assert false let file_flag_of_int = function | 0x0 -> ContainsMetadata (* 0x0 *) | 0x1 -> ContainsNoMetadata (* 0x1 *) | _ -> assert false let manifest_resource_flag_of_int i = match i land 0x7 with | 0x0 -> RNone (* 0x0 *) | 0x1 -> RPublic (* 0x1 *) | 0x2 -> RPrivate (* 0x2 *) | _ -> assert false let generic_variance_of_int = function (* mask 0x3 *) | 0x0 -> VNone (* 0x0 *) | 0x1 -> VCovariant (* 0x1 *) | 0x2 -> VContravariant (* 0x2 *) | _ -> assert false let generic_constraint_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with (* mask 0x1C *) | 0x4 -> CInstanceType (* 0x4 *) | 0x8 -> CValueType (* 0x8 *) | 0x10 -> CDefaultCtor (* 0x10 *) | _ -> assert false) :: acc else acc) [] [0x4;0x8;0x10] let generic_flags_of_int i = { gf_variance = generic_variance_of_int (i land 0x3); gf_constraint = generic_constraint_of_int (i land 0x1C); } let null_generic_flags = generic_flags_of_int 0 (* TODO: convert from string to Bigstring if OCaml 4 is available *) type meta_ctx = { compressed : bool; (* is a compressed stream *) strings_stream : string; mutable strings_offset : int; (* #Strings: a string heap containing the names of metadata items *) blob_stream : string; mutable blob_offset : int; (* #Blob: blob heap containing internal metadata binary object, such as default values, signatures, etc *) guid_stream : string; mutable guid_offset : int; (* #GUID: a GUID heap *) us_stream : string; (* #US: user-defined strings *) meta_stream : string; (* may be either: *) (* #~: compressed (optimized) metadata stream *) (* #-: uncompressed (unoptimized) metadata stream *) mutable meta_edit_continue : bool; mutable meta_has_deleted : bool; module_cache : meta_cache; tables : (clr_meta DynArray.t) array; table_sizes : ( string -> int -> int * int ) array; extra_streams : clr_stream_header list; relations : (meta_pointer, clr_meta) Hashtbl.t; typedefs : (ilpath, meta_type_def) Hashtbl.t; mutable delays : (unit -> unit) list; } and meta_cache = { mutable lookups : (string -> meta_ctx option) list; mutable mcache : (meta_module * meta_ctx) list; } let empty = "" let create_cache () = { lookups = []; mcache = []; } let add_lookup cache fn = cache.lookups <- fn :: cache.lookups (* ******* Reading from Strings ********* *) let sget s pos = Char.code (String.get s pos) let read_compressed_i32 s pos = let v = sget s pos in (* Printf.printf "compressed: %x (18 0x%x 19 0x%x)\n" v (sget s (pos+20)) (sget s (pos+21)); *) if v land 0x80 = 0x00 then pos+1, v else if v land 0xC0 = 0x80 then pos+2, ((v land 0x3F) lsl 8) lor (sget s (pos+1)) else if v land 0xE0 = 0xC0 then pos+4, ((v land 0x1F) lsl 24) lor ((sget s (pos+1)) lsl 16) lor ((sget s (pos+2)) lsl 8) lor (sget s (pos+3)) else error (Printf.sprintf "Error reading compressed data. Invalid first byte: %x" v) let int_of_table (idx : clr_meta_idx) : int = Obj.magic idx let table_of_int (idx : int) : clr_meta_idx = Obj.magic idx let sread_ui8 s pos = let n1 = sget s pos in pos+1,n1 let sread_i32 s pos = let n1 = sget s pos in let n2 = sget s (pos+1) in let n3 = sget s (pos+2) in let n4 = sget s (pos+3) in pos+4, (n4 lsl 24) lor (n3 lsl 16) lor (n2 lsl 8) lor n1 let sread_real_i32 s pos = let n1 = sget s pos in let n2 = sget s (pos+1) in let n3 = sget s (pos+2) in let n4 = Int32.of_int (sget s (pos+3)) in let n = Int32.of_int ((n3 lsl 16) lor (n2 lsl 8) lor n1) in let n4 = Int32.shift_left n4 24 in pos+4, (Int32.logor n4 n) let sread_i64 s pos = let pos, v1 = sread_real_i32 s (pos+1) in let v1 = Int64.of_int32 v1 in let pos, v2 = sread_real_i32 s pos in let v2 = Int64.of_int32 v2 in let v2 = Int64.shift_left v2 32 in pos, (Int64.logor v1 v2) let sread_ui16 s pos = let n1 = sget s pos in let n2 = sget s (pos+1) in pos+2, (n2 lsl 8) lor n1 let read_cstring ctx pos = let s = ctx.strings_stream in let rec loop en = match String.get s en with | '\x00' -> en - pos | _ -> loop (en+1) in (* printf "len 0x%x - pos 0x%x\n" (String.length s) pos; *) let len = loop pos in String.sub s pos len let read_sstring_idx ctx pos = let s = ctx.meta_stream in let metapos,i = if ctx.strings_offset = 2 then sread_ui16 s pos else sread_i32 s pos in match i with | 0 -> metapos, "" | _ -> metapos, read_cstring ctx i let read_sblob_idx ctx pos = let s = ctx.meta_stream in let metapos, i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in match i with | 0 -> metapos,"" | _ -> let bpos, len = read_compressed_i32 ctx.blob_stream i in metapos, String.sub ctx.blob_stream bpos len let read_sguid_idx ctx pos = let s = ctx.meta_stream in let metapos,i = if ctx.guid_offset = 2 then sread_ui16 s pos else sread_i32 s pos in match i with | 0 -> metapos, "" | _ -> let s = ctx.guid_stream in let i = i - 1 in let pos = i * 16 in metapos, String.sub s pos 16 let read_callconv ctx s pos = let pos, conv = read_compressed_i32 s pos in let callconv = callconv_of_int conv ~match_generic_inst:true in let pos = match conv land 0x10 with | 0x10 -> fst (read_compressed_i32 s pos) | _ -> pos in pos, callconv let read_constant ctx with_type s pos = match with_type with | CBool -> pos+1, IBool (sget s (pos) <> 0) | CChar -> let pos, v = sread_ui16 s (pos) in pos, IChar v | CInt8 | CUInt8 -> pos+1,IByte (sget s (pos)) | CInt16 | CUInt16 -> let pos, v = sread_ui16 s (pos) in pos, IShort v | CInt32 | CUInt32 -> let pos, v = sread_real_i32 s (pos) in pos, IInt v | CInt64 | CUInt64 -> let pos, v = sread_i64 s (pos) in pos, IInt64 v | CFloat32 -> let pos, v1 = sread_real_i32 s (pos) in pos, IFloat32 (Int32.float_of_bits v1) | CFloat64 -> let pos, v1 = sread_i64 s (pos) in pos, IFloat64 (Int64.float_of_bits v1) | CString -> if sget s pos = 0xff then pos+1,IString "" else let pos, len = read_compressed_i32 s pos in pos+len, IString (String.sub s pos len) | CNullRef -> pos+1, INull let sig_to_const = function | SBool -> CBool | SChar -> CChar | SInt8 -> CInt8 | SUInt8 -> CUInt8 | SInt16 -> CInt16 | SUInt16 -> CUInt16 | SInt32 -> CInt32 | SUInt32 -> CUInt32 | SInt64 -> CInt64 | SUInt64 -> CUInt64 | SFloat32 -> CFloat32 | SFloat64 -> CFloat64 | SString -> CString | _ -> CNullRef let read_constant_type ctx s pos = match sget s pos with | 0x2 -> pos+1, CBool (* 0x2 *) | 0x3 -> pos+1, CChar (* 0x3 *) | 0x4 -> pos+1, CInt8 (* 0x4 *) | 0x5 -> pos+1, CUInt8 (* 0x5 *) | 0x6 -> pos+1, CInt16 (* 0x6 *) | 0x7 -> pos+1, CUInt16 (* 0x7 *) | 0x8 -> pos+1, CInt32 (* 0x8 *) | 0x9 -> pos+1, CUInt32 (* 0x9 *) | 0xA -> pos+1, CInt64 (* 0xA *) | 0xB -> pos+1, CUInt64 (* 0xB *) | 0xC -> pos+1, CFloat32 (* 0xC *) | 0xD -> pos+1, CFloat64 (* 0xD *) | 0xE -> pos+1, CString (* 0xE *) | 0x12 -> pos+1, CNullRef (* 0x12 *) | i -> Printf.printf "0x%x\n" i; assert false let action_security_of_int = function | 0x1 -> SecRequest (* 0x1 *) | 0x2 -> SecDemand (* 0x2 *) | 0x3 -> SecAssert (* 0x3 *) | 0x4 -> SecDeny (* 0x4 *) | 0x5 -> SecPermitOnly (* 0x5 *) | 0x6 -> SecLinkCheck (* 0x6 *) | 0x7 -> SecInheritCheck (* 0x7 *) | 0x8 -> SecReqMin (* 0x8 *) | 0x9 -> SecReqOpt (* 0x9 *) | 0xA -> SecReqRefuse (* 0xA *) | 0xB -> SecPreJitGrant (* 0xB *) | 0xC -> SecPreJitDeny (* 0xC *) | 0xD -> SecNonCasDemand (* 0xD *) | 0xE -> SecNonCasLinkDemand (* 0xE *) | 0xF -> SecNonCasInheritance (* 0xF *) | _ -> assert false (* ******* Metadata Tables ********* *) let null_meta = UnknownMeta (-1) let mk_module id = { md_id = id; md_generation = 0; md_name = empty; md_vid = empty; md_encid = empty; md_encbase_id = empty; } let null_module = mk_module (-1) let mk_type_ref id = { tr_id = id; tr_resolution_scope = null_meta; tr_name = empty; tr_namespace = []; } let null_type_ref = mk_type_ref (-1) let mk_type_def id = { td_id = id; td_flags = null_type_def_flags; td_name = empty; td_namespace = []; td_extends = None; td_field_list = []; td_method_list = []; td_extra_enclosing = None; } let null_type_def = mk_type_def (-1) let mk_field id = { f_id = id; f_flags = null_field_flags; f_name = empty; f_signature = SVoid; } let null_field = mk_field (-1) let mk_field_ptr id = { fp_id = id; fp_field = null_field; } let null_field_ptr = mk_field_ptr (-1) let mk_method id = { m_id = id; m_rva = Int32.of_int (-1); m_flags = null_method_flags; m_name = empty; m_signature = SVoid; m_param_list = []; m_declaring = None; } let null_method = mk_method (-1) let mk_method_ptr id = { mp_id = id; mp_method = null_method; } let null_method_ptr = mk_method_ptr (-1) let mk_param id = { p_id = id; p_flags = null_param_flags; p_sequence = -1; p_name = empty; } let null_param = mk_param (-1) let mk_param_ptr id = { pp_id = id; pp_param = null_param; } let null_param_ptr = mk_param_ptr (-1) let mk_interface_impl id = { ii_id = id; ii_class = null_type_def; (* TypeDef rid *) ii_interface = null_meta; } let null_interface_impl = mk_interface_impl (-1) let mk_member_ref id = { memr_id = id; memr_class = null_meta; memr_name = empty; memr_signature = SVoid; } let null_member_ref = mk_member_ref (-1) let mk_constant id = { c_id = id; c_type = CNullRef; c_parent = null_meta; c_value = INull; } let null_constant = mk_constant (-1) let mk_custom_attribute id = { ca_id = id; ca_parent = null_meta; ca_type = null_meta; ca_value = None; } let null_custom_attribute = mk_custom_attribute (-1) let mk_field_marshal id = { fm_id = id; fm_parent = null_meta; fm_native_type = NVoid; } let null_field_marshal = mk_field_marshal (-1) let mk_decl_security id = { ds_id = id; ds_action = SecNull; ds_parent = null_meta; ds_permission_set = empty; } let mk_class_layout id = { cl_id = id; cl_packing_size = -1; cl_class_size = -1; cl_parent = null_type_def; } let mk_field_layout id = { fl_id = id; fl_offset = -1; fl_field = null_field; } let mk_stand_alone_sig id = { sa_id = id; sa_signature = SVoid; } let mk_event id = { e_id = id; e_flags = []; e_name = empty; e_event_type = null_meta; } let null_event = mk_event (-1) let mk_event_map id = { em_id = id; em_parent = null_type_def; em_event_list = []; } let mk_event_ptr id = { ep_id = id; ep_event = null_event; } let mk_property id = { prop_id = id; prop_flags = []; prop_name = empty; prop_type = SVoid; } let null_property = mk_property (-1) let mk_property_map id = { pm_id = id; pm_parent = null_type_def; pm_property_list = []; } let mk_property_ptr id = { prp_id = id; prp_property = null_property; } let mk_method_semantics id = { ms_id = id; ms_semantic = []; ms_method = null_method; ms_association = null_meta; } let mk_method_impl id = { mi_id = id; mi_class = null_type_def; mi_method_body = null_meta; mi_method_declaration = null_meta; } let mk_module_ref id = { modr_id = id; modr_name = empty; } let null_module_ref = mk_module_ref (-1) let mk_type_spec id = { ts_id = id; ts_signature = SVoid; } let mk_enc_log id = { el_id = id; el_token = -1; el_func_code = -1; } let mk_impl_map id = { im_id = id; im_flags = null_impl_flags; im_forwarded = null_meta; im_import_name = empty; im_import_scope = null_module_ref; } let mk_enc_map id = { encm_id = id; encm_token = -1; } let mk_field_rva id = { fr_id = id; fr_rva = Int32.zero; fr_field = null_field; } let mk_assembly id = { a_id = id; a_hash_algo = HNone; a_major = -1; a_minor = -1; a_build = -1; a_rev = -1; a_flags = []; a_public_key = empty; a_name = empty; a_locale = empty; } let mk_assembly_processor id = { ap_id = id; ap_processor = -1; } let mk_assembly_os id = { aos_id = id; aos_platform_id = -1; aos_major_version = -1; aos_minor_version = -1; } let mk_assembly_ref id = { ar_id = id; ar_major = -1; ar_minor = -1; ar_build = -1; ar_rev = -1; ar_flags = []; ar_public_key = empty; ar_name = empty; ar_locale = empty; ar_hash_value = empty; } let null_assembly_ref = mk_assembly_ref (-1) let mk_assembly_ref_processor id = { arp_id = id; arp_processor = -1; arp_assembly_ref = null_assembly_ref; } let mk_assembly_ref_os id = { aros_id = id; aros_platform_id = -1; aros_major = -1; aros_minor = -1; aros_assembly_ref = null_assembly_ref; } let mk_file id = { file_id = id; file_flags = ContainsMetadata; file_name = empty; file_hash_value = empty; } let mk_exported_type id = { et_id = id; et_flags = null_type_def_flags; et_type_def_id = -1; et_type_name = empty; et_type_namespace = []; et_implementation = null_meta; } let mk_manifest_resource id = { mr_id = id; mr_offset = -1; mr_flags = RNone; mr_name = empty; mr_implementation = None; } let mk_nested_class id = { nc_id = id; nc_nested = null_type_def; nc_enclosing = null_type_def; } let mk_generic_param id = { gp_id = id; gp_number = -1; gp_flags = null_generic_flags; gp_owner = null_meta; gp_name = None; } let null_generic_param = mk_generic_param (-1) let mk_method_spec id = { mspec_id = id; mspec_method = null_meta; mspec_instantiation = SVoid; } let mk_generic_param_constraint id = { gc_id = id; gc_owner = null_generic_param; gc_constraint = null_meta; } let mk_meta tbl id = match tbl with | IModule -> Module (mk_module id) | ITypeRef -> TypeRef (mk_type_ref id) | ITypeDef -> TypeDef (mk_type_def id) | IFieldPtr -> FieldPtr (mk_field_ptr id) | IField -> Field (mk_field id) | IMethodPtr -> MethodPtr (mk_method_ptr id) | IMethod -> Method (mk_method id) | IParamPtr -> ParamPtr (mk_param_ptr id) | IParam -> Param (mk_param id) | IInterfaceImpl -> InterfaceImpl (mk_interface_impl id) | IMemberRef -> MemberRef (mk_member_ref id) | IConstant -> Constant (mk_constant id) | ICustomAttribute -> CustomAttribute (mk_custom_attribute id) | IFieldMarshal -> FieldMarshal(mk_field_marshal id) | IDeclSecurity -> DeclSecurity(mk_decl_security id) | IClassLayout -> ClassLayout(mk_class_layout id) | IFieldLayout -> FieldLayout(mk_field_layout id) | IStandAloneSig -> StandAloneSig(mk_stand_alone_sig id) | IEventMap -> EventMap(mk_event_map id) | IEventPtr -> EventPtr(mk_event_ptr id) | IEvent -> Event(mk_event id) | IPropertyMap -> PropertyMap(mk_property_map id) | IPropertyPtr -> PropertyPtr(mk_property_ptr id) | IProperty -> Property(mk_property id) | IMethodSemantics -> MethodSemantics(mk_method_semantics id) | IMethodImpl -> MethodImpl(mk_method_impl id) | IModuleRef -> ModuleRef(mk_module_ref id) | ITypeSpec -> TypeSpec(mk_type_spec id) | IImplMap -> ImplMap(mk_impl_map id) | IFieldRVA -> FieldRVA(mk_field_rva id) | IENCLog -> ENCLog(mk_enc_log id) | IENCMap -> ENCMap(mk_enc_map id) | IAssembly -> Assembly(mk_assembly id) | IAssemblyProcessor -> AssemblyProcessor(mk_assembly_processor id) | IAssemblyOS -> AssemblyOS(mk_assembly_os id) | IAssemblyRef -> AssemblyRef(mk_assembly_ref id) | IAssemblyRefProcessor -> AssemblyRefProcessor(mk_assembly_ref_processor id) | IAssemblyRefOS -> AssemblyRefOS(mk_assembly_ref_os id) | IFile -> File(mk_file id) | IExportedType -> ExportedType(mk_exported_type id) | IManifestResource -> ManifestResource(mk_manifest_resource id) | INestedClass -> NestedClass(mk_nested_class id) | IGenericParam -> GenericParam(mk_generic_param id) | IMethodSpec -> MethodSpec(mk_method_spec id) | IGenericParamConstraint -> GenericParamConstraint(mk_generic_param_constraint id) | i -> UnknownMeta (int_of_table i) let get_table ctx idx rid = let cur = ctx.tables.(int_of_table idx) in DynArray.get cur (rid-1) (* special coded types *) let max_clr_meta_idx = 76 let coded_description = Array.init (max_clr_meta_idx - 63) (fun i -> let i = 64 + i in match table_of_int i with | ITypeDefOrRef -> Array.of_list [ITypeDef;ITypeRef;ITypeSpec], 2 | IHasConstant -> Array.of_list [IField;IParam;IProperty], 2 | IHasCustomAttribute -> Array.of_list [IMethod;IField;ITypeRef;ITypeDef;IParam;IInterfaceImpl;IMemberRef; IModule;IDeclSecurity;IProperty;IEvent;IStandAloneSig;IModuleRef; ITypeSpec;IAssembly;IAssemblyRef;IFile;IExportedType;IManifestResource; IGenericParam;IGenericParamConstraint;IMethodSpec], 5 | IHasFieldMarshal -> Array.of_list [IField;IParam], 1 | IHasDeclSecurity -> Array.of_list [ITypeDef;IMethod;IAssembly], 2 | IMemberRefParent -> Array.of_list [ITypeDef;ITypeRef;IModuleRef;IMethod;ITypeSpec], 3 | IHasSemantics -> Array.of_list [IEvent;IProperty], 1 | IMethodDefOrRef -> Array.of_list [IMethod;IMemberRef], 1 | IMemberForwarded -> Array.of_list [IField;IMethod], 1 | IImplementation -> Array.of_list [IFile;IAssemblyRef;IExportedType], 2 | ICustomAttributeType -> Array.of_list [ITypeRef(* unused ? *);ITypeDef (* unused ? *);IMethod;IMemberRef(*;IString FIXME *)], 3 | IResolutionScope -> Array.of_list [IModule;IModuleRef;IAssemblyRef;ITypeRef], 2 | ITypeOrMethodDef -> Array.of_list [ITypeDef;IMethod], 1 | _ -> print_endline ("Unknown coded index: " ^ string_of_int i); assert false) let set_coded_sizes ctx rows = let check i tbls max = if List.exists (fun t -> let _, nrows = rows.(int_of_table t) in nrows >= max ) tbls then ctx.table_sizes.(i) <- sread_i32 in for i = 64 to (max_clr_meta_idx) do let tbls, size = coded_description.(i - 64) in let max = 1 lsl (16 - size) in check i (Array.to_list tbls) max done let sread_from_table_opt ctx in_blob tbl s pos = let i = int_of_table tbl in let sread = if in_blob then read_compressed_i32 else ctx.table_sizes.(i) in let pos, rid = sread s pos in if i >= 64 then begin let tbls,size = coded_description.(i-64) in let mask = (1 lsl size) - 1 in let mask = if mask = 0 then 1 else mask in let tidx = rid land mask in let real_rid = rid lsr size in let real_tbl = tbls.(tidx) in (* printf "rid 0x%x - table idx 0x%x - real_rid 0x%x\n\n" rid tidx real_rid; *) if real_rid = 0 then pos, None else pos, Some (get_table ctx real_tbl real_rid) end else if rid = 0 then pos, None else pos, Some (get_table ctx tbl rid) let sread_from_table ctx in_blob tbl s pos = let pos, opt = sread_from_table_opt ctx in_blob tbl s pos in pos, Option.get opt (* ******* SIGNATURE READING ********* *) let read_inline_str s pos = let pos, len = read_compressed_i32 s pos in let ret = String.sub s pos len in pos+len,ret let rec read_ilsig ctx s pos = let i = sget s pos in (* printf "0x%x\n" i; *) let pos = pos + 1 in match i with | 0x1 -> pos, SVoid (* 0x1 *) | 0x2 -> pos, SBool (* 0x2 *) | 0x3 -> pos, SChar (* 0x3 *) | 0x4 -> pos, SInt8 (* 0x4 *) | 0x5 -> pos, SUInt8 (* 0x5 *) | 0x6 -> pos, SInt16 (* 0x6 *) | 0x7 -> pos, SUInt16 (* 0x7 *) | 0x8 -> pos, SInt32 (* 0x8 *) | 0x9 -> pos, SUInt32 (* 0x9 *) | 0xA -> pos, SInt64 (* 0xA *) | 0xB -> pos, SUInt64 (* 0xB *) | 0xC -> pos, SFloat32 (* 0xC *) | 0xD -> pos, SFloat64 (* 0xD *) | 0xE -> pos, SString (* 0xE *) | 0xF -> let pos, s = read_ilsig ctx s pos in pos, SPointer s | 0x10 -> let pos, s = read_ilsig ctx s pos in pos, SManagedPointer s | 0x11 -> let pos, vt = sread_from_table ctx true ITypeDefOrRef s pos in pos, SValueType vt | 0x12 -> let pos, c = sread_from_table ctx true ITypeDefOrRef s pos in pos, SClass c | 0x13 -> let n = sget s pos in pos + 1, STypeParam n | 0x14 -> let pos, ssig = read_ilsig ctx s pos in let pos, rank = read_compressed_i32 s pos in let pos, numsizes = read_compressed_i32 s pos in let pos = ref pos in let sizearray = Array.init numsizes (fun _ -> let p, size = read_compressed_i32 s !pos in pos := p; size ) in let pos, bounds = read_compressed_i32 s !pos in let pos = ref pos in let boundsarray = Array.init bounds (fun _ -> let p, b = read_compressed_i32 s !pos in pos := p; let signed = b land 0x1 = 0x1 in let b = b lsr 1 in if signed then -b else b ) in let ret = Array.init rank (fun i -> (if i >= bounds then None else Some boundsarray.(i)) , (if i >= numsizes then None else Some sizearray.(i)) ) in !pos, SArray(ssig, ret) | 0x15 -> (* let pos, c = sread_from_table ctx ITypeDefOrRef s pos in *) let pos, ssig = read_ilsig ctx s pos in let pos, ntypes = read_compressed_i32 s pos in let rec loop acc pos n = if n > ntypes then pos, List.rev acc else let pos, ssig = read_ilsig ctx s pos in loop (ssig :: acc) pos (n+1) in let pos, args = loop [] pos 1 in pos, SGenericInst (ssig, args) | 0x16 -> pos, STypedReference (* 0x16 *) | 0x18 -> pos, SIntPtr (* 0x18 *) | 0x19 -> pos, SUIntPtr (* 0x19 *) | 0x1B -> let pos, conv = read_compressed_i32 s pos in let callconv = callconv_of_int conv in let pos, ntypes = read_compressed_i32 s pos in let pos, ret = read_ilsig ctx s pos in let rec loop acc pos n = if n >= ntypes then pos, List.rev acc else let pos, ssig = read_ilsig ctx s pos in loop (ssig :: acc) pos (n+1) in let pos, args = loop [] pos 1 in pos, SFunPtr (callconv, ret, args) | 0x1C -> pos, SObject (* 0x1C *) | 0x1D -> let pos, ssig = read_ilsig ctx s pos in pos, SVector ssig | 0x1E -> let pos, conv = read_compressed_i32 s pos in pos, SMethodTypeParam conv | 0x1F -> let pos, tdef = sread_from_table ctx true ITypeDefOrRef s pos in let pos, ilsig = read_ilsig ctx s pos in pos, SReqModifier (tdef, ilsig) | 0x20 -> let pos, tdef = sread_from_table ctx true ITypeDefOrRef s pos in let pos, ilsig = read_ilsig ctx s pos in pos, SOptModifier (tdef, ilsig) | 0x41 -> pos, SSentinel (* 0x41 *) | 0x45 -> let pos, ssig = read_ilsig ctx s pos in pos,SPinned ssig (* 0x45 *) (* special undocumented constants *) | 0x50 -> pos, SType | 0x51 -> pos, SBoxed | 0x55 -> let pos, vt = read_inline_str s pos in pos, SEnum vt | _ -> Printf.printf "unknown ilsig 0x%x\n\n" i; assert false let rec read_variantsig ctx s pos = let pos, b = sread_ui8 s pos in match b with | 0x00 -> pos, VT_EMPTY (* 0x00 *) | 0x01 -> pos, VT_NULL (* 0x01 *) | 0x02 -> pos, VT_I2 (* 0x02 *) | 0x03 -> pos, VT_I4 (* 0x03 *) | 0x04 -> pos, VT_R4 (* 0x04 *) | 0x05 -> pos, VT_R8 (* 0x05 *) | 0x06 -> pos, VT_CY (* 0x06 *) | 0x07 -> pos, VT_DATE (* 0x07 *) | 0x08 -> pos, VT_BSTR (* 0x08 *) | 0x09 -> pos, VT_DISPATCH (* 0x09 *) | 0x0A -> pos, VT_ERROR (* 0x0A *) | 0x0B -> pos, VT_BOOL (* 0x0B *) | 0x0C -> pos, VT_VARIANT (* 0x0C *) | 0x0D -> pos, VT_UNKNOWN (* 0x0D *) | 0x0E -> pos, VT_DECIMAL (* 0x0E *) | 0x10 -> pos, VT_I1 (* 0x10 *) | 0x11 -> pos, VT_UI1 (* 0x11 *) | 0x12 -> pos, VT_UI2 (* 0x12 *) | 0x13 -> pos, VT_UI4 (* 0x13 *) | 0x14 -> pos, VT_I8 (* 0x14 *) | 0x15 -> pos, VT_UI8 (* 0x15 *) | 0x16 -> pos, VT_INT (* 0x16 *) | 0x17 -> pos, VT_UINT (* 0x17 *) | 0x18 -> pos, VT_VOID (* 0x18 *) | 0x19 -> pos, VT_HRESULT (* 0x19 *) | 0x1A -> pos, VT_PTR (* 0x1A *) | 0x1B -> pos, VT_SAFEARRAY (* 0x1B *) | 0x1C -> pos, VT_CARRAY (* 0x1C *) | 0x1D -> pos, VT_USERDEFINED (* 0x1D *) | 0x1E -> pos, VT_LPSTR (* 0x1E *) | 0x1F -> pos, VT_LPWSTR (* 0x1F *) | 0x24 -> pos, VT_RECORD (* 0x24 *) | 0x40 -> pos, VT_FILETIME (* 0x40 *) | 0x41 -> pos, VT_BLOB (* 0x41 *) | 0x42 -> pos, VT_STREAM (* 0x42 *) | 0x43 -> pos, VT_STORAGE (* 0x43 *) | 0x44 -> pos, VT_STREAMED_OBJECT (* 0x44 *) | 0x45 -> pos, VT_STORED_OBJECT (* 0x45 *) | 0x46 -> pos, VT_BLOB_OBJECT (* 0x46 *) | 0x47 -> pos, VT_CF (* 0x47 *) | 0x48 -> pos, VT_CLSID (* 0x48 *) | _ -> assert false let rec read_nativesig ctx s pos : int * nativesig = let pos, b = sread_ui8 s pos in match b with | 0x01 -> pos, NVoid (* 0x01 *) | 0x02 -> pos, NBool (* 0x02 *) | 0x03 -> pos, NInt8 (* 0x03 *) | 0x4 -> pos, NUInt8 (* 0x4 *) | 0x5 -> pos, NInt16 (* 0x5 *) | 0x6 -> pos, NUInt16 (* 0x6 *) | 0x7 -> pos, NInt32 (* 0x7 *) | 0x8 -> pos, NUInt32 (* 0x8 *) | 0x9 -> pos, NInt64 (* 0x9 *) | 0xA -> pos, NUInt64 (* 0xA *) | 0xB -> pos, NFloat32 (* 0xB *) | 0xC -> pos, NFloat64 (* 0xC *) | 0xD -> pos, NSysChar (* 0xD *) | 0xE -> pos, NVariant (* 0xE *) | 0xF -> pos, NCurrency (* 0xF *) | 0x10 -> pos, NPointer (* 0x10 *) | 0x11 -> pos, NDecimal (* 0x11 *) | 0x12 -> pos, NDate (* 0x12 *) | 0x13 -> pos, NBStr (* 0x13 *) | 0x14 -> pos, NLPStr (* 0x14 *) | 0x15 -> pos, NLPWStr (* 0x15 *) | 0x16 -> pos, NLPTStr (* 0x16 *) | 0x17 -> let pos, size = read_compressed_i32 s pos in pos, NFixedString size | 0x18 -> pos, NObjectRef (* 0x18 *) | 0x19 -> pos, NUnknown (* 0x19 *) | 0x1A -> pos, NDispatch (* 0x1A *) | 0x1B -> pos, NStruct (* 0x1B *) | 0x1C -> pos, NInterface (* 0x1C *) | 0x1D -> let pos, v = read_variantsig ctx s pos in pos, NSafeArray v | 0x1E -> let pos, size = read_compressed_i32 s pos in let pos, t = read_variantsig ctx s pos in pos, NFixedArray (size,t) | 0x1F -> pos, NIntPointer (* 0x1F *) | 0x20 -> pos, NUIntPointer (* 0x20 *) | 0x21 -> pos, NNestedStruct (* 0x21 *) | 0x22 -> pos, NByValStr (* 0x22 *) | 0x23 -> pos, NAnsiBStr (* 0x23 *) | 0x24 -> pos, NTBStr (* 0x24 *) | 0x25 -> pos, NVariantBool (* 0x25 *) | 0x26 -> pos, NFunctionPtr (* 0x26 *) | 0x28 -> pos, NAsAny (* 0x28 *) | 0x2A -> let pos, elt = read_nativesig ctx s pos in let pos, paramidx = read_compressed_i32 s pos in let pos, size = read_compressed_i32 s pos in let pos, param_mult = read_compressed_i32 s pos in pos, NArray(elt,paramidx,size,param_mult) | 0x2B -> pos, NLPStruct (* 0x2B *) | 0x2C -> let pos, guid_val = read_inline_str s pos in let pos, unmanaged = read_inline_str s pos in (* FIXME: read TypeRef *) pos, NCustomMarshaler (guid_val,unmanaged) | 0x2D -> pos, NError (* 0x2D *) | i -> pos, NCustom i let read_blob_idx ctx s pos = let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in metapos, i let read_nativesig_idx ctx s pos = let s = ctx.meta_stream in let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let s = ctx.blob_stream in let _, ret = read_nativesig ctx s i in metapos, ret let read_method_ilsig_idx ctx pos = let s = ctx.meta_stream in let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let s = ctx.blob_stream in let pos, len = read_compressed_i32 s i in (* for x = 0 to len do *) (* printf "%x " (sget s (i+x)) *) (* done; *) let endpos = pos + len in (* printf "\n"; *) let pos, callconv = read_callconv ctx s pos in let pos, ntypes = read_compressed_i32 s pos in let pos, ret = read_ilsig ctx s pos in let rec loop acc pos n = if n > ntypes || pos >= endpos then pos, List.rev acc else let pos, ssig = read_ilsig ctx s pos in loop (ssig :: acc) pos (n+1) in let pos, args = loop [] pos 1 in metapos, SFunPtr (callconv, ret, args) let read_ilsig_idx ctx pos = let s = ctx.meta_stream in let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let s = ctx.blob_stream in let i, _ = read_compressed_i32 s i in let _, ilsig = read_ilsig ctx s i in metapos, ilsig let read_field_ilsig_idx ?(force_field=true) ctx pos = let s = ctx.meta_stream in let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let s = ctx.blob_stream in let i, _ = read_compressed_i32 s i in if sget s i <> 0x6 then if force_field then error ("Invalid field signature: " ^ string_of_int (sget s i)) else read_method_ilsig_idx ctx pos else let _, ilsig = read_ilsig ctx s (i+1) in metapos, ilsig let get_underlying_enum_type ctx name = (* first try to get a typedef *) let ns, name = match List.rev (String.nsplit name ".") with | name :: ns -> List.rev ns, name | _ -> assert false in try let tdefs = ctx.tables.(int_of_table ITypeDef) in let len = DynArray.length tdefs in let rec loop_find idx = if idx >= len then raise Not_found else let tdef = match DynArray.get tdefs idx with | TypeDef td -> td | _ -> assert false in if tdef.td_name = name && tdef.td_namespace = ns then tdef else loop_find (idx+1) in let tdef = loop_find 1 in (* now find the first static field associated with it *) try let nonstatic = List.find (fun f -> not (List.mem CStatic f.f_flags.ff_contract) ) tdef.td_field_list in nonstatic.f_signature with | Not_found -> assert false (* should never happen! *) with | Not_found -> (* FIXME: in order to correctly handle SEnum, we need to look it up *) (* from either this assembly or from any other assembly that we reference *) (* this is tricky - specially since this reader does not intend to handle file system *) (* operations by itself. For now, if an enum is referenced from another module, *) (* we won't handle it. The `cache` structure is laid out to deal with these problems *) (* but isn't implemented yet *) raise Exit let read_custom_attr ctx attr_type s pos = let pos, prolog = sread_ui16 s pos in if prolog <> 0x0001 then error (sprintf "Error reading custom attribute: Expected prolog 0x0001 ; got 0x%x" prolog); let isig = match attr_type with | Method m -> m.m_signature | MemberRef mr -> mr.memr_signature | _ -> assert false in let args = match follow isig with | SFunPtr (_,ret,args) -> args | _ -> assert false in let rec read_instance ilsig pos = (* print_endline (IlMetaDebug.ilsig_s ilsig); *) match follow ilsig with | SBool | SChar | SInt8 | SUInt8 | SInt16 | SUInt16 | SInt32 | SUInt32 | SInt64 | SUInt64 | SFloat32 | SFloat64 | SString -> let pos, cons = read_constant ctx (sig_to_const ilsig) s pos in pos, InstConstant (cons) | SClass c when is_type (["System"],"Type") c -> if (sget s pos) == 0xff then pos+1, InstConstant INull else let pos, len = read_compressed_i32 s pos in pos+len, InstType (String.sub s pos len) | SType -> let pos, len = read_compressed_i32 s pos in pos+len, InstType (String.sub s pos len) | SObject | SBoxed -> (* boxed *) let pos = if sget s pos = 0x51 then pos+1 else pos in let pos, ilsig = read_ilsig ctx s pos in let pos, ret = read_instance ilsig pos in pos, InstBoxed( ret ) (* (match follow ilsig with *) (* | SEnum e -> *) (* let ilsig = get_underlying_enum_type ctx e; *) (* let pos,e = if is_boxed then sread_i32 s pos else read_compressed_i32 s pos in *) (* pos, InstBoxed(InstEnum e) *) (* | _ -> *) (* let pos, boxed = read_constant ctx (sig_to_const ilsig) s pos in *) (* pos, InstBoxed (InstConstant boxed)) *) | SEnum e -> let ilsig = get_underlying_enum_type ctx e in read_instance ilsig pos | SValueType _ -> (* enum *) let pos, e = sread_i32 s pos in pos, InstEnum e | _ -> assert false in let rec read_fixed acc args pos = match args with | [] -> pos, List.rev acc | SVector isig :: args -> (* print_endline "vec"; *) let pos, nelem = sread_real_i32 s pos in let pos, ret = if nelem = -1l then pos, InstConstant INull else let nelem = Int32.to_int nelem in let rec loop acc pos n = if n = nelem then pos, InstArray (List.rev acc) else let pos, inst = read_instance isig pos in loop (inst :: acc) pos (n+1) in loop [] pos 0 in read_fixed (ret :: acc) args pos | isig :: args -> let pos, i = read_instance isig pos in read_fixed (i :: acc) args pos in (* let tpos = pos in *) let pos, fixed = read_fixed [] args pos in (* printf "fixed %d : " (List.length args); *) (* for x = tpos to pos do *) (* printf "%x " (sget s x) *) (* done; *) (* printf "\n"; *) (* let len = String.length s - pos - 1 in *) (* let len = if len > 10 then 10 else len in *) (* for x = 0 to len do *) (* printf "%x " (sget s (pos + x)) *) (* done; *) (* printf "\n"; *) let pos, nnamed = read_compressed_i32 s pos in let pos = if nnamed > 0 then pos+1 else pos in (* FIXME: this is a hack / quick fix around #3485 . We need to actually read named arguments *) (* let rec read_named acc pos n = *) (* if n = nnamed then *) (* pos, List.rev acc *) (* else *) (* let pos, forp = sread_ui8 s pos in *) (* let is_prop = if forp = 0x53 then *) (* false *) (* else if forp = 0x54 then *) (* true *) (* else *) (* error (sprintf "named custom attribute error: expected 0x53 or 0x54 - got 0x%x" forp) *) (* in *) (* let pos, t = read_ilsig ctx s pos in *) (* let pos, len = read_compressed_i32 s pos in *) (* let name = String.sub s pos len in *) (* let pos = pos+len in *) (* let pos, inst = read_instance t pos in *) (* read_named ( (is_prop, name, inst) :: acc ) pos (n+1) *) (* in *) (* let pos, named = read_named [] pos 0 in *) pos, (fixed, []) (* pos, (fixed, named) *) let read_custom_attr_idx ctx ca attr_type pos = let s = ctx.meta_stream in let metapos,i = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in if i = 0 then metapos else let s = ctx.blob_stream in let i, _ = read_compressed_i32 s i in ctx.delays <- (fun () -> try let _, attr = read_custom_attr ctx attr_type s i in ca.ca_value <- Some attr with | Exit -> () ) :: ctx.delays; metapos let read_next_index ctx offset table last pos = if last then DynArray.length ctx.tables.(int_of_table table) + 1 else let s = ctx.meta_stream in let _, idx = ctx.table_sizes.(int_of_table table) s (pos+offset) in idx let get_rev_list ctx table ptr_table begin_idx end_idx = (* first check if index exists on pointer table *) let ptr_table_t = ctx.tables.(int_of_table ptr_table) in (* printf "table %d begin %d end %d\n" (int_of_table table) begin_idx end_idx; *) match ctx.compressed, DynArray.length ptr_table_t with | true, _ | _, 0 -> (* use direct index *) let rec loop idx acc = if idx >= end_idx then acc else loop (idx+1) (get_table ctx table idx :: acc) in loop begin_idx [] | _ -> (* use indirect index *) let rec loop idx acc = if idx > end_idx then acc else loop (idx+1) (get_table ctx ptr_table idx :: acc) in let ret = loop begin_idx [] in List.map (fun meta -> let p = meta_root_ptr meta in get_table ctx table p.ptr_to.root_id ) ret let read_list ctx table ptr_table begin_idx offset last pos = let end_idx = read_next_index ctx offset table last pos in get_rev_list ctx table ptr_table begin_idx end_idx let parse_ns id = match String.nsplit id "." with | [""] -> [] | ns -> ns let get_meta_pointer = function | Module r -> IModule, r.md_id | TypeRef r -> ITypeRef, r.tr_id | TypeDef r -> ITypeDef, r.td_id | FieldPtr r -> IFieldPtr, r.fp_id | Field r -> IField, r.f_id | MethodPtr r -> IMethodPtr, r.mp_id | Method r -> IMethod, r.m_id | ParamPtr r -> IParamPtr, r.pp_id | Param r -> IParam, r.p_id | InterfaceImpl r -> IInterfaceImpl, r.ii_id | MemberRef r -> IMemberRef, r.memr_id | Constant r -> IConstant, r.c_id | CustomAttribute r -> ICustomAttribute, r.ca_id | FieldMarshal r -> IFieldMarshal, r.fm_id | DeclSecurity r -> IDeclSecurity, r.ds_id | ClassLayout r -> IClassLayout, r.cl_id | FieldLayout r -> IFieldLayout, r.fl_id | StandAloneSig r -> IStandAloneSig, r.sa_id | EventMap r -> IEventMap, r.em_id | EventPtr r -> IEventPtr, r.ep_id | Event r -> IEvent, r.e_id | PropertyMap r -> IPropertyMap, r.pm_id | PropertyPtr r -> IPropertyPtr, r.prp_id | Property r -> IProperty, r.prop_id | MethodSemantics r -> IMethodSemantics, r.ms_id | MethodImpl r -> IMethodImpl, r.mi_id | ModuleRef r -> IModuleRef, r.modr_id | TypeSpec r -> ITypeSpec, r.ts_id | ImplMap r -> IImplMap, r.im_id | FieldRVA r -> IFieldRVA, r.fr_id | ENCLog r -> IENCLog, r.el_id | ENCMap r -> IENCMap, r.encm_id | Assembly r -> IAssembly, r.a_id | AssemblyProcessor r -> IAssemblyProcessor, r.ap_id | AssemblyOS r -> IAssemblyOS, r.aos_id | AssemblyRef r -> IAssemblyRef, r.ar_id | AssemblyRefProcessor r -> IAssemblyRefProcessor, r.arp_id | AssemblyRefOS r -> IAssemblyRefOS, r.aros_id | File r -> IFile, r.file_id | ExportedType r -> IExportedType, r.et_id | ManifestResource r -> IManifestResource, r.mr_id | NestedClass r -> INestedClass, r.nc_id | GenericParam r -> IGenericParam, r.gp_id | MethodSpec r -> IMethodSpec, r.mspec_id | GenericParamConstraint r -> IGenericParamConstraint, r.gc_id | _ -> assert false let add_relation ctx key v = let ptr = get_meta_pointer key in Hashtbl.add ctx.relations ptr v let read_table_at ctx tbl n last pos = (* print_endline ("rr " ^ string_of_int (n+1)); *) let s = ctx.meta_stream in match get_table ctx tbl (n+1 (* indices start at 1 *)) with | Module m -> let pos, gen = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in let pos, vid = read_sguid_idx ctx pos in let pos, encid = read_sguid_idx ctx pos in let pos, encbase_id = read_sguid_idx ctx pos in m.md_generation <- gen; m.md_name <- name; m.md_vid <- vid; m.md_encid <- encid; m.md_encbase_id <- encbase_id; pos, Module m | TypeRef tr -> let pos, scope = sread_from_table ctx false IResolutionScope s pos in let pos, name = read_sstring_idx ctx pos in let pos, ns = read_sstring_idx ctx pos in tr.tr_resolution_scope <- scope; tr.tr_name <- name; tr.tr_namespace <- parse_ns ns; (* print_endline name; *) (* print_endline ns; *) pos, TypeRef tr | TypeDef td -> let startpos = pos in let pos, flags = sread_i32 s pos in let pos, name = read_sstring_idx ctx pos in let pos, ns = read_sstring_idx ctx pos in let ns = parse_ns ns in let pos, extends = sread_from_table_opt ctx false ITypeDefOrRef s pos in let field_offset = pos - startpos in let pos, flist_begin = ctx.table_sizes.(int_of_table IField) s pos in let method_offset = pos - startpos in let pos, mlist_begin = ctx.table_sizes.(int_of_table IMethod) s pos in td.td_flags <- type_def_flags_of_int flags; td.td_name <- name; td.td_namespace <- ns; td.td_extends <- extends; td.td_field_list <- List.rev_map get_field (read_list ctx IField IFieldPtr flist_begin field_offset last pos); td.td_method_list <- List.rev_map get_method (read_list ctx IMethod IMethodPtr mlist_begin method_offset last pos); List.iter (fun m -> m.m_declaring <- Some td) td.td_method_list; let path = get_path (TypeDef td) in Hashtbl.add ctx.typedefs path td; (* print_endline "Type Def!"; *) (* print_endline name; *) (* print_endline ns; *) pos, TypeDef td | FieldPtr fp -> let pos, field = sread_from_table ctx false IField s pos in let field = get_field field in fp.fp_field <- field; pos, FieldPtr fp | Field f -> let pos, flags = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in (* print_endline ("FIELD NAME " ^ name); *) let pos, ilsig = read_field_ilsig_idx ctx pos in (* print_endline (ilsig_s ilsig); *) f.f_flags <- field_flags_of_int flags; f.f_name <- name; f.f_signature <- ilsig; pos, Field f | MethodPtr mp -> let pos, m = sread_from_table ctx false IMethod s pos in let m = get_method m in mp.mp_method <- m; pos, MethodPtr mp | Method m -> let startpos = pos in let pos, rva = sread_i32 s pos in let pos, iflags = sread_ui16 s pos in let pos, flags = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in let pos, ilsig = read_method_ilsig_idx ctx pos in let offset = pos - startpos in let pos, paramlist = ctx.table_sizes.(int_of_table IParam) s pos in m.m_rva <- Int32.of_int rva; m.m_flags <- method_flags_of_int iflags flags; m.m_name <- name; m.m_signature <- ilsig; m.m_param_list <- List.rev_map get_param (read_list ctx IParam IParamPtr paramlist offset last pos); pos, Method m | ParamPtr pp -> let pos, p = sread_from_table ctx false IParam s pos in let p = get_param p in pp.pp_param <- p; pos, ParamPtr pp | Param p -> let pos, flags = sread_ui16 s pos in let pos, sequence = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in p.p_flags <- param_flags_of_int flags; p.p_sequence <- sequence; p.p_name <- name; pos, Param p | InterfaceImpl ii -> let pos, cls = sread_from_table ctx false ITypeDef s pos in add_relation ctx cls (InterfaceImpl ii); let cls = get_type_def cls in let pos, interface = sread_from_table ctx false ITypeDefOrRef s pos in ii.ii_class <- cls; ii.ii_interface <- interface; pos, InterfaceImpl ii | MemberRef mr -> let pos, cls = sread_from_table ctx false IMemberRefParent s pos in let pos, name = read_sstring_idx ctx pos in (* print_endline name; *) (* let pos, signature = read_ilsig_idx ctx pos in *) let pos, signature = read_field_ilsig_idx ~force_field:false ctx pos in (* print_endline (ilsig_s signature); *) mr.memr_class <- cls; mr.memr_name <- name; mr.memr_signature <- signature; add_relation ctx cls (MemberRef mr); pos, MemberRef mr | Constant c -> let pos, ctype = read_constant_type ctx s pos in let pos = pos+1 in let pos, parent = sread_from_table ctx false IHasConstant s pos in let pos, blobpos = if ctx.blob_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let blob = ctx.blob_stream in let blobpos, _ = read_compressed_i32 blob blobpos in let _, value = read_constant ctx ctype blob blobpos in c.c_type <- ctype; c.c_parent <- parent; c.c_value <- value; add_relation ctx parent (Constant c); pos, Constant c | CustomAttribute ca -> let pos, parent = sread_from_table ctx false IHasCustomAttribute s pos in let pos, t = sread_from_table ctx false ICustomAttributeType s pos in let pos = read_custom_attr_idx ctx ca t pos in ca.ca_parent <- parent; ca.ca_type <- t; ca.ca_value <- None; (* this will be delayed by read_custom_attr_idx *) add_relation ctx parent (CustomAttribute ca); pos, CustomAttribute ca | FieldMarshal fm -> let pos, parent = sread_from_table ctx false IHasFieldMarshal s pos in let pos, nativesig = read_nativesig_idx ctx s pos in fm.fm_parent <- parent; fm.fm_native_type <- nativesig; add_relation ctx parent (FieldMarshal fm); pos, FieldMarshal fm | DeclSecurity ds -> let pos, action = sread_ui16 s pos in let action = action_security_of_int action in let pos, parent = sread_from_table ctx false IHasDeclSecurity s pos in let pos, permission_set = read_sblob_idx ctx pos in ds.ds_action <- action; ds.ds_parent <- parent; ds.ds_permission_set <- permission_set; add_relation ctx parent (DeclSecurity ds); pos, DeclSecurity ds | ClassLayout cl -> let pos, psize = sread_ui16 s pos in let pos, csize = sread_i32 s pos in let pos, parent = sread_from_table ctx false ITypeDef s pos in add_relation ctx parent (ClassLayout cl); let parent = get_type_def parent in cl.cl_packing_size <- psize; cl.cl_class_size <- csize; cl.cl_parent <- parent; pos, ClassLayout cl | FieldLayout fl -> let pos, offset = sread_i32 s pos in let pos, field = sread_from_table ctx false IField s pos in fl.fl_offset <- offset; fl.fl_field <- get_field field; add_relation ctx field (FieldLayout fl); pos, FieldLayout fl | StandAloneSig sa -> let pos, ilsig = read_field_ilsig_idx ~force_field:false ctx pos in (* print_endline (ilsig_s ilsig); *) sa.sa_signature <- ilsig; pos, StandAloneSig sa | EventMap em -> let startpos = pos in let pos, parent = sread_from_table ctx false ITypeDef s pos in let offset = pos - startpos in let pos, event_list = ctx.table_sizes.(int_of_table IEvent) s pos in em.em_parent <- get_type_def parent; em.em_event_list <- List.rev_map get_event (read_list ctx IEvent IEventPtr event_list offset last pos); add_relation ctx parent (EventMap em); pos, EventMap em | EventPtr ep -> let pos, event = sread_from_table ctx false IEvent s pos in ep.ep_event <- get_event event; pos, EventPtr ep | Event e -> let pos, flags = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in let pos, event_type = sread_from_table ctx false ITypeDefOrRef s pos in e.e_flags <- event_flags_of_int flags; e.e_name <- name; (* print_endline name; *) e.e_event_type <- event_type; add_relation ctx event_type (Event e); pos, Event e | PropertyMap pm -> let startpos = pos in let pos, parent = sread_from_table ctx false ITypeDef s pos in let offset = pos - startpos in let pos, property_list = ctx.table_sizes.(int_of_table IProperty) s pos in pm.pm_parent <- get_type_def parent; pm.pm_property_list <- List.rev_map get_property (read_list ctx IProperty IPropertyPtr property_list offset last pos); add_relation ctx parent (PropertyMap pm); pos, PropertyMap pm | PropertyPtr pp -> let pos, property = sread_from_table ctx false IProperty s pos in pp.prp_property <- get_property property; pos, PropertyPtr pp | Property prop -> let pos, flags = sread_ui16 s pos in let pos, name = read_sstring_idx ctx pos in let pos, t = read_field_ilsig_idx ~force_field:false ctx pos in prop.prop_flags <- property_flags_of_int flags; prop.prop_name <- name; (* print_endline name; *) prop.prop_type <- t; (* print_endline (ilsig_s t); *) pos, Property prop | MethodSemantics ms -> let pos, semantic = sread_ui16 s pos in let pos, m = sread_from_table ctx false IMethod s pos in let pos, association = sread_from_table ctx false IHasSemantics s pos in ms.ms_semantic <- semantic_flags_of_int semantic; ms.ms_method <- get_method m; ms.ms_association <- association; add_relation ctx m (MethodSemantics ms); add_relation ctx association (MethodSemantics ms); pos, MethodSemantics ms | MethodImpl mi -> let pos, cls = sread_from_table ctx false ITypeDef s pos in let pos, method_body = sread_from_table ctx false IMethodDefOrRef s pos in let pos, method_declaration = sread_from_table ctx false IMethodDefOrRef s pos in mi.mi_class <- get_type_def cls; mi.mi_method_body <- method_body; mi.mi_method_declaration <- method_declaration; add_relation ctx method_body (MethodImpl mi); pos, MethodImpl mi | ModuleRef modr -> let pos, name = read_sstring_idx ctx pos in modr.modr_name <- name; (* print_endline name; *) pos, ModuleRef modr | TypeSpec ts -> let pos, signature = read_ilsig_idx ctx pos in (* print_endline (ilsig_s signature); *) ts.ts_signature <- signature; pos, TypeSpec ts | ENCLog el -> let pos, token = sread_i32 s pos in let pos, func_code = sread_i32 s pos in el.el_token <- token; el.el_func_code <- func_code; pos, ENCLog el | ImplMap im -> let pos, flags = sread_ui16 s pos in let pos, forwarded = sread_from_table ctx false IMemberForwarded s pos in let pos, import_name = read_sstring_idx ctx pos in let pos, import_scope = sread_from_table ctx false IModuleRef s pos in im.im_flags <- impl_flags_of_int flags; im.im_forwarded <- forwarded; im.im_import_name <- import_name; im.im_import_scope <- get_module_ref import_scope; add_relation ctx forwarded (ImplMap im); pos, ImplMap im | ENCMap em -> let pos, token = sread_i32 s pos in em.encm_token <- token; pos, ENCMap em | FieldRVA f -> let pos, rva = sread_real_i32 s pos in let pos, field = sread_from_table ctx false IField s pos in f.fr_rva <- rva; f.fr_field <- get_field field; add_relation ctx field (FieldRVA f); pos, FieldRVA f | Assembly a -> let pos, hash_algo = sread_i32 s pos in let pos, major = sread_ui16 s pos in let pos, minor = sread_ui16 s pos in let pos, build = sread_ui16 s pos in let pos, rev = sread_ui16 s pos in let pos, flags = sread_i32 s pos in let pos, public_key = read_sblob_idx ctx pos in let pos, name = read_sstring_idx ctx pos in let pos, locale = read_sstring_idx ctx pos in a.a_hash_algo <- hash_algo_of_int hash_algo; a.a_major <- major; a.a_minor <- minor; a.a_build <- build; a.a_rev <- rev; a.a_flags <- assembly_flags_of_int flags; a.a_public_key <- public_key; a.a_name <- name; a.a_locale <- locale; pos, Assembly a | AssemblyProcessor ap -> let pos, processor = sread_i32 s pos in ap.ap_processor <- processor; pos, AssemblyProcessor ap | AssemblyOS aos -> let pos, platform_id = sread_i32 s pos in let pos, major = sread_i32 s pos in let pos, minor = sread_i32 s pos in aos.aos_platform_id <- platform_id; aos.aos_major_version <- major; aos.aos_minor_version <- minor; pos, AssemblyOS aos | AssemblyRef ar -> let pos, major = sread_ui16 s pos in let pos, minor = sread_ui16 s pos in let pos, build = sread_ui16 s pos in let pos, rev = sread_ui16 s pos in let pos, flags = sread_i32 s pos in let pos, public_key = read_sblob_idx ctx pos in let pos, name = read_sstring_idx ctx pos in let pos, locale = read_sstring_idx ctx pos in let pos, hash_value = read_sblob_idx ctx pos in ar.ar_major <- major; ar.ar_minor <- minor; ar.ar_build <- build; ar.ar_rev <- rev; ar.ar_flags <- assembly_flags_of_int flags; ar.ar_public_key <- public_key; ar.ar_name <- name; (* print_endline name; *) ar.ar_locale <- locale; (* print_endline locale; *) ar.ar_hash_value <- hash_value; pos, AssemblyRef ar | AssemblyRefProcessor arp -> let pos, processor = sread_i32 s pos in let pos, assembly_ref = sread_from_table ctx false IAssemblyRef s pos in arp.arp_processor <- processor; arp.arp_assembly_ref <- get_assembly_ref assembly_ref; pos, AssemblyRefProcessor arp | AssemblyRefOS aros -> let pos, platform_id = sread_i32 s pos in let pos, major = sread_i32 s pos in let pos, minor = sread_i32 s pos in let pos, assembly_ref = sread_from_table ctx false IAssemblyRef s pos in aros.aros_platform_id <- platform_id; aros.aros_major <- major; aros.aros_minor <- minor; aros.aros_assembly_ref <- get_assembly_ref assembly_ref; pos, AssemblyRefOS aros | File file -> let pos, flags = sread_i32 s pos in let pos, name = read_sstring_idx ctx pos in let pos, hash_value = read_sblob_idx ctx pos in file.file_flags <- file_flag_of_int flags; file.file_name <- name; (* print_endline ("file " ^ name); *) file.file_hash_value <- hash_value; pos, File file | ExportedType et -> let pos, flags = sread_i32 s pos in let pos, type_def_id = sread_i32 s pos in let pos, type_name = read_sstring_idx ctx pos in let pos, type_namespace = read_sstring_idx ctx pos in let pos, impl = sread_from_table ctx false IImplementation s pos in et.et_flags <- type_def_flags_of_int flags; et.et_type_def_id <- type_def_id; et.et_type_name <- type_name; et.et_type_namespace <- parse_ns type_namespace; et.et_implementation <- impl; add_relation ctx impl (ExportedType et); pos, ExportedType et | ManifestResource mr -> let pos, offset = sread_i32 s pos in let pos, flags = sread_i32 s pos in (* printf "offset 0x%x flags 0x%x\n" offset flags; *) let pos, name = read_sstring_idx ctx pos in let rpos, i = ctx.table_sizes.(int_of_table IImplementation) s pos in let pos, impl = if i = 0 then rpos, None else let pos, ret = sread_from_table ctx false IImplementation s pos in add_relation ctx ret (ManifestResource mr); pos, Some ret in mr.mr_offset <- offset; mr.mr_flags <- manifest_resource_flag_of_int flags; mr.mr_name <- name; mr.mr_implementation <- impl; pos, ManifestResource mr | NestedClass nc -> let pos, nested = sread_from_table ctx false ITypeDef s pos in let pos, enclosing = sread_from_table ctx false ITypeDef s pos in nc.nc_nested <- get_type_def nested; nc.nc_enclosing <- get_type_def enclosing; assert (nc.nc_nested.td_extra_enclosing = None); nc.nc_nested.td_extra_enclosing <- Some nc.nc_enclosing; add_relation ctx enclosing (NestedClass nc); pos, NestedClass nc | GenericParam gp -> let pos, number = sread_ui16 s pos in let pos, flags = sread_ui16 s pos in let pos, owner = sread_from_table ctx false ITypeOrMethodDef s pos in let spos, nidx = if ctx.strings_offset = 2 then sread_ui16 s pos else sread_i32 s pos in let pos, name = if nidx = 0 then spos, None else let pos, ret = read_sstring_idx ctx pos in (* print_endline ret; *) pos, Some ret in gp.gp_number <- number; gp.gp_flags <- generic_flags_of_int flags; gp.gp_owner <- owner; gp.gp_name <- name; add_relation ctx owner (GenericParam gp); pos, GenericParam gp | MethodSpec mspec -> let pos, meth = sread_from_table ctx false IMethodDefOrRef s pos in let pos, instantiation = read_method_ilsig_idx ctx pos in (* print_endline (ilsig_s instantiation); *) mspec.mspec_method <- meth; mspec.mspec_instantiation <- instantiation; add_relation ctx meth (MethodSpec mspec); pos, MethodSpec mspec | GenericParamConstraint gc -> let pos, owner = sread_from_table ctx false IGenericParam s pos in let pos, c = sread_from_table ctx false ITypeDefOrRef s pos in gc.gc_owner <- get_generic_param owner; gc.gc_constraint <- c; add_relation ctx owner (GenericParamConstraint gc); pos, GenericParamConstraint gc | _ -> assert false (* ******* META READING ********* *) let preset_sizes ctx rows = Array.iteri (fun n r -> match r with | false,_ -> () | true,nrows -> (* printf "table %d nrows %d\n" n nrows; *) let tbl = table_of_int n in ctx.tables.(n) <- DynArray.init (nrows) (fun id -> mk_meta tbl (id+1)) ) rows (* let read_ *) let read_meta ctx = (* read header *) let s = ctx.meta_stream in let pos = 4 + 1 + 1 in let flags = sget s pos in List.iter (fun i -> if flags land i = i then match i with | 0x01 -> ctx.strings_offset <- 4 | 0x02 -> ctx.guid_offset <- 4 | 0x04 -> ctx.blob_offset <- 4 | 0x20 -> assert (not ctx.compressed); ctx.meta_edit_continue <- true | 0x80 -> assert (not ctx.compressed); ctx.meta_has_deleted <- true | _ -> assert false ) [0x01;0x02;0x04;0x20;0x80]; let rid = sget s (pos+1) in ignore rid; let pos = pos + 2 in let mask = Array.init 8 ( fun n -> sget s (pos + n) ) in (* loop over masks and check which table is set *) let set_table = Array.init 64 (fun n -> let idx = n / 8 in let bit = n mod 8 in (mask.(idx) lsr bit) land 0x1 = 0x1 ) in let pos = ref (pos + 8 + 8) in (* there is an extra 'sorted' field, which we do not use *) let rows = Array.mapi (fun i b -> match b with | false -> false,0 | true -> let nidx, nrows = sread_i32 s !pos in if nrows > 0xFFFF then ctx.table_sizes.(i) <- sread_i32; pos := nidx; true,nrows ) set_table in set_coded_sizes ctx rows; (* pre-set all sizes *) preset_sizes ctx rows; Array.iteri (fun n r -> match r with | false,_ -> () | true,nrows -> (* print_endline (string_of_int n); *) let fn = read_table_at ctx (table_of_int n) in let rec loop_fn n = if n = nrows then () else begin let p, _ = fn n (n = (nrows-1)) !pos in pos := p; loop_fn (n+1) end in loop_fn 0 ) rows; () let read_padded i npad = let buf = Buffer.create 10 in let rec loop n = let chr = read i in if chr = '\x00' then begin let npad = n land 0x3 in if npad <> 0 then ignore (nread i (4 - npad)); Buffer.contents buf end else begin Buffer.add_char buf chr; if n = npad then Buffer.contents buf else loop (n+1) end in loop 1 let read_meta_tables pctx header module_cache = let i = pctx.r.i in seek_rva pctx (fst header.clr_meta); let magic = nread_string i 4 in if magic <> "BSJB" then error ("Error reading metadata table: Expected magic 'BSJB'. Got " ^ magic); let major = read_ui16 i in let minor = read_ui16 i in ignore major; ignore minor; (* no use for them *) ignore (read_i32 i); (* reserved *) let vlen = read_i32 i in let ver = nread i vlen in ignore ver; (* meta storage header *) ignore (read_ui16 i); (* reserved *) let nstreams = read_ui16 i in let rec streams n acc = let offset = read_i32 i in let size = read_real_i32 i in let name = read_padded i 32 in let acc = { str_offset = offset; str_size = size; str_name = name; } :: acc in if (n+1) = nstreams then acc else streams (n+1) acc in let streams = streams 0 [] in (* streams *) let compressed = ref None in let sstrings = ref "" in let sblob = ref "" in let sguid = ref "" in let sus = ref "" in let smeta = ref "" in let extra = ref [] in List.iter (fun s -> let rva = Int32.add (fst header.clr_meta) (Int32.of_int s.str_offset) in seek_rva pctx rva; match String.lowercase s.str_name with | "#guid" -> sguid := nread_string i (Int32.to_int s.str_size) | "#strings" -> sstrings := nread_string i (Int32.to_int s.str_size) | "#us" -> sus := nread_string i (Int32.to_int s.str_size) | "#blob" -> sblob := nread_string i (Int32.to_int s.str_size) | "#~" -> assert (Option.is_none !compressed); compressed := Some true; smeta := nread_string i (Int32.to_int s.str_size) | "#-" -> assert (Option.is_none !compressed); compressed := Some false; smeta := nread_string i (Int32.to_int s.str_size) | _ -> extra := s :: !extra ) streams; let compressed = match !compressed with | None -> error "No compressed or uncompressed metadata streams was found!" | Some c -> c in let tables = Array.init 64 (fun _ -> DynArray.create ()) in let ctx = { compressed = compressed; strings_stream = !sstrings; strings_offset = 2; blob_stream = !sblob; blob_offset = 2; guid_stream = !sguid; guid_offset = 2; us_stream = !sus; meta_stream = !smeta; meta_edit_continue = false; meta_has_deleted = false; module_cache = module_cache; extra_streams = !extra; relations = Hashtbl.create 64; typedefs = Hashtbl.create 64; tables = tables; table_sizes = Array.make (max_clr_meta_idx+1) sread_ui16; delays = []; } in read_meta ctx; let delays = ctx.delays in ctx.delays <- []; List.iter (fun fn -> fn()) delays; assert (ctx.delays = []); { il_tables = ctx.tables; il_relations = ctx.relations; il_typedefs = ctx.typedefs; } haxe_4.2.4.orig/libs/ilib/ilMetaTools.ml0000644000175000017500000003364114146064214020046 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open IlMeta;; open IlData;; open PeReader;; open ExtString;; let rec follow s = match s with | SReqModifier (_,s) | SOptModifier (_,s) -> follow s | SPinned s -> follow s | s -> s (* tells if a type_def_or_ref is of type `path` *) let rec is_type path = function | TypeDef td -> td.td_namespace = fst path && td.td_name = snd path | TypeRef tr -> tr.tr_namespace = fst path && tr.tr_name = snd path | TypeSpec ts -> (match follow ts.ts_signature with | SClass c | SValueType c -> is_type path c | SGenericInst(s,_) -> (match follow s with | SClass c | SValueType c -> is_type path c | _ -> false) | _ -> false) | _ -> assert false let rec get_path type_def_or_ref = match type_def_or_ref with | TypeDef td -> (match td.td_extra_enclosing with | None -> td.td_namespace,[], td.td_name | Some t2 -> let ns, nested = match get_path (TypeDef t2) with | ns,nested, name -> ns, nested @ [name] in ns,nested, td.td_name) | TypeRef tr -> (match tr.tr_resolution_scope with | TypeRef tr2 -> let ns, nested = match get_path (TypeRef tr2) with | ns,nested, name -> ns, nested @ [name] in ns,nested, tr.tr_name | _ -> tr.tr_namespace,[],tr.tr_name) | TypeSpec ts -> (match follow ts.ts_signature with | SClass c | SValueType c -> get_path c | SGenericInst(s,_) -> (match follow s with | SClass c | SValueType c -> get_path c | _ -> [],[],"") | _ -> [],[],"") | _ -> assert false let constant_s = function | IBool true -> "true" | IBool false -> "false" | IChar chr -> "'" ^ Char.escaped (Char.chr chr) ^ "'" | IByte i -> Printf.sprintf "(byte) 0x%x" i | IShort i -> Printf.sprintf "(short) 0x%x" i | IInt i -> Printf.sprintf "0x%lx" i | IInt64 i -> Printf.sprintf "0x%Lx" i | IFloat32 f -> Printf.sprintf "%ff" f | IFloat64 f -> Printf.sprintf "%fd" f | IString s -> "\"" ^ s ^ "\"" | INull -> "null" let path_s = function | [],[], s -> s | ns,[], s -> String.concat "." ns ^ "." ^ s | [],enc, s -> String.concat "@" enc ^ "." ^ s | ns,enc,s -> String.concat "." ns ^ "." ^ String.concat "@" enc ^ "." ^ s let rec ilsig_s = function | SBoxed -> "boxed" | SEnum e -> "enum " ^ e | SType -> "System.Type" | SVoid -> "void" | SBool -> "bool" | SChar -> "char" | SInt8 -> "int8" | SUInt8 -> "uint8" | SInt16 -> "int16" | SUInt16 -> "uint16" | SInt32 -> "int32" | SUInt32 -> "uint32" | SInt64 -> "int64" | SUInt64 -> "uint64" | SFloat32 -> "float" | SFloat64 -> "double" | SString -> "string" | SPointer s -> ilsig_s s ^ "*" | SManagedPointer s -> ilsig_s s ^ "&" | SValueType td -> "valuetype " ^ path_s (get_path td) | SClass cl -> "classtype " ^ path_s (get_path cl) | STypeParam t | SMethodTypeParam t -> "!" ^ string_of_int t | SArray (s,opts) -> ilsig_s s ^ "[" ^ String.concat "," (List.map (function | Some i,None when i <> 0 -> string_of_int i ^ "..." | None, Some i when i <> 0 -> string_of_int i | Some s, Some b when b = 0 && s <> 0 -> string_of_int s ^ "..." | Some s, Some b when s <> 0 || b <> 0 -> let b = if b > 0 then b - 1 else b in string_of_int s ^ "..." ^ string_of_int (s + b) | _ -> "" ) (Array.to_list opts)) ^ "]" | SGenericInst (t,tl) -> "generic " ^ (ilsig_s t) ^ "<" ^ String.concat ", " (List.map ilsig_s tl) ^ ">" | STypedReference -> "typedreference" | SIntPtr -> "native int" | SUIntPtr -> "native unsigned int" | SFunPtr (callconv,ret,args) -> "function " ^ ilsig_s ret ^ "(" ^ String.concat ", " (List.map ilsig_s args) ^ ")" | SObject -> "object" | SVector s -> ilsig_s s ^ "[]" | SReqModifier (_,s) -> "modreq() " ^ ilsig_s s | SOptModifier (_,s) -> "modopt() " ^ ilsig_s s | SSentinel -> "..." | SPinned s -> "pinned " ^ ilsig_s s let rec instance_s = function | InstConstant c -> constant_s c | InstBoxed b -> "boxed " ^ instance_s b | InstType t -> "Type " ^ t | InstArray il -> "[" ^ String.concat ", " (List.map instance_s il) ^ "]" | InstEnum e -> "Enum " ^ string_of_int e let named_attribute_s (is_prop,name,inst) = (if is_prop then "/*prop*/ " else "") ^ name ^ " = " ^ instance_s inst let attributes_s (il,nal) = "(" ^ (String.concat ", " (List.map instance_s il)) ^ (if nal <> [] then ", " ^ (String.concat ", " (List.map named_attribute_s nal)) else "") ^")" let meta_root m : meta_root = match m with | Module r -> Obj.magic r | TypeRef r -> Obj.magic r | TypeDef r -> Obj.magic r | FieldPtr r -> Obj.magic r | Field r -> Obj.magic r | MethodPtr r -> Obj.magic r | Method r -> Obj.magic r | ParamPtr r -> Obj.magic r | Param r -> Obj.magic r | InterfaceImpl r -> Obj.magic r | MemberRef r -> Obj.magic r | Constant r -> Obj.magic r | CustomAttribute r -> Obj.magic r | FieldMarshal r -> Obj.magic r | DeclSecurity r -> Obj.magic r | ClassLayout r -> Obj.magic r | FieldLayout r -> Obj.magic r | StandAloneSig r -> Obj.magic r | EventMap r -> Obj.magic r | EventPtr r -> Obj.magic r | Event r -> Obj.magic r | PropertyMap r -> Obj.magic r | PropertyPtr r -> Obj.magic r | Property r -> Obj.magic r | MethodSemantics r -> Obj.magic r | MethodImpl r -> Obj.magic r | ModuleRef r -> Obj.magic r | TypeSpec r -> Obj.magic r | ImplMap r -> Obj.magic r | FieldRVA r -> Obj.magic r | ENCLog r -> Obj.magic r | ENCMap r -> Obj.magic r | Assembly r -> Obj.magic r | AssemblyProcessor r -> Obj.magic r | AssemblyOS r -> Obj.magic r | AssemblyRef r -> Obj.magic r | AssemblyRefProcessor r -> Obj.magic r | AssemblyRefOS r -> Obj.magic r | File r -> Obj.magic r | ExportedType r -> Obj.magic r | ManifestResource r -> Obj.magic r | NestedClass r -> Obj.magic r | GenericParam r -> Obj.magic r | MethodSpec r -> Obj.magic r | GenericParamConstraint r -> Obj.magic r | _ -> assert false let meta_root_ptr p : meta_root_ptr = match p with | FieldPtr r -> Obj.magic r | MethodPtr r -> Obj.magic r | ParamPtr r -> Obj.magic r | EventPtr r -> Obj.magic r | _ -> assert false let rec ilsig_norm = function | SVoid -> LVoid | SBool -> LBool | SChar -> LChar | SInt8 -> LInt8 | SUInt8 -> LUInt8 | SInt16 -> LInt16 | SUInt16 -> LUInt16 | SInt32 -> LInt32 | SUInt32 -> LUInt32 | SInt64 -> LInt64 | SUInt64 -> LUInt64 | SFloat32 -> LFloat32 | SFloat64 -> LFloat64 | SString -> LString | SPointer p -> LPointer (ilsig_norm p) | SManagedPointer p -> LManagedPointer (ilsig_norm p) | SValueType v -> LValueType (get_path v, []) | SClass v -> LClass (get_path v, []) | STypeParam i -> LTypeParam i | SArray (t, opts) -> LArray(ilsig_norm t, opts) | SGenericInst (p,args) -> (match follow p with | SClass v -> LClass(get_path v, List.map ilsig_norm args) | SValueType v -> LValueType(get_path v, List.map ilsig_norm args) | _ -> assert false) | STypedReference -> LTypedReference | SIntPtr -> LIntPtr | SUIntPtr -> LUIntPtr | SFunPtr(conv,ret,args) -> LMethod(conv,ilsig_norm ret,List.map ilsig_norm args) | SObject -> LObject | SVector s -> LVector (ilsig_norm s) | SMethodTypeParam i -> LMethodTypeParam i | SReqModifier (_,s) -> ilsig_norm s | SOptModifier (_,s) -> ilsig_norm s | SSentinel -> LSentinel | SPinned s -> ilsig_norm s | SType -> LClass( (["System"],[],"Type"), []) | SBoxed -> LObject | SEnum e -> let lst = String.nsplit e "." in let rev = List.rev lst in match rev with | hd :: tl -> LValueType( (List.rev tl,[],hd), [] ) | _ -> assert false let ilsig_t s = { snorm = ilsig_norm s; ssig = s; } let ilsig_of_tdef_ref = function | TypeDef td -> SClass (TypeDef td) | TypeRef tr -> SClass (TypeRef tr) | TypeSpec ts -> ts.ts_signature | s -> (* error ("Invalid tdef_or_ref: " ^ ilsig_s s) *) error "Invalid tdef_or_ref" let convert_field ctx f = let constant = List.fold_left (fun c -> function | Constant c -> Some c.c_value | _ -> c ) None (Hashtbl.find_all ctx.il_relations (IField, f.f_id)) in { fname = f.f_name; fflags = f.f_flags; fsig = ilsig_t f.f_signature; fconstant = constant; } let convert_generic ctx gp = let constraints = List.fold_left (fun c -> function | GenericParamConstraint gc -> ilsig_t (ilsig_of_tdef_ref gc.gc_constraint) :: c | _ -> c ) [] (Hashtbl.find_all ctx.il_relations (IGenericParam, gp.gp_id)) in { tnumber = gp.gp_number; tflags = gp.gp_flags; tname = gp.gp_name; tconstraints = constraints; } let convert_method ctx m = let msig = ilsig_t m.m_signature in let ret, margs = match follow msig.ssig with | SFunPtr (_,ret,args) -> (* print_endline m.m_name; *) (* print_endline (Printf.sprintf "%d vs %d" (List.length args) (List.length m.m_param_list)); *) (* print_endline (String.concat ", " (List.map (fun p ->string_of_int p.p_sequence ^ ":" ^ p.p_name) m.m_param_list)); *) (* print_endline (String.concat ", " (List.map (ilsig_s) args)); *) (* print_endline "\n"; *) (* TODO: find out WHY this happens *) let param_list = List.filter (fun p -> p.p_sequence > 0) m.m_param_list in if List.length param_list <> List.length args then let i = ref 0 in ilsig_t ret, List.map (fun s -> incr i; "arg" ^ (string_of_int !i), { pf_io = []; pf_reserved = [] }, ilsig_t s) args else ilsig_t ret, List.map2 (fun p s -> p.p_name, p.p_flags, ilsig_t s ) param_list args | _ -> assert false in let override, types, semantics = List.fold_left (fun (override,types,semantics) -> function | MethodImpl mi -> let declaring = match mi.mi_method_declaration with | MemberRef mr -> Some (get_path mr.memr_class, mr.memr_name) | Method m -> (match m.m_declaring with | Some td -> Some (get_path (TypeDef td), m.m_name) | None -> override) | _ -> override in declaring, types, semantics | GenericParam gp -> override, (convert_generic ctx gp) :: types, semantics | MethodSemantics ms -> override, types, ms.ms_semantic @ semantics | _ -> override,types, semantics ) (None,[],[]) (Hashtbl.find_all ctx.il_relations (IMethod, m.m_id)) in { mname = m.m_name; mflags = m.m_flags; msig = msig; margs = margs; mret = ret; moverride = override; mtypes = types; msemantics = semantics; } let convert_prop ctx prop = let name = prop.prop_name in let flags = prop.prop_flags in let psig = ilsig_t prop.prop_type in let pget, pset = List.fold_left (fun (get,set) -> function | MethodSemantics ms when List.mem SGetter ms.ms_semantic -> assert (get = None); Some (ms.ms_method.m_name, ms.ms_method.m_flags), set | MethodSemantics ms when List.mem SSetter ms.ms_semantic -> assert (set = None); get, Some (ms.ms_method.m_name,ms.ms_method.m_flags) | _ -> get,set ) (None,None) (Hashtbl.find_all ctx.il_relations (IProperty, prop.prop_id)) in { pname = name; psig = psig; pflags = flags; pget = pget; pset = pset; } let convert_event ctx event = let name = event.e_name in let flags = event.e_flags in let esig = ilsig_of_tdef_ref event.e_event_type in let esig = ilsig_t esig in let add, remove, eraise = List.fold_left (fun (add, remove, eraise) -> function | MethodSemantics ms when List.mem SAddOn ms.ms_semantic -> assert (add = None); Some (ms.ms_method.m_name, ms.ms_method.m_flags), remove, eraise | MethodSemantics ms when List.mem SRemoveOn ms.ms_semantic -> assert (remove = None); add, Some (ms.ms_method.m_name,ms.ms_method.m_flags), eraise | MethodSemantics ms when List.mem SFire ms.ms_semantic -> assert (eraise = None); add, remove, Some (ms.ms_method.m_name, ms.ms_method.m_flags) | _ -> add, remove, eraise ) (None,None,None) (Hashtbl.find_all ctx.il_relations (IEvent, event.e_id)) in { ename = name; eflags = flags; esig = esig; eadd = add; eremove = remove; eraise = eraise; } let convert_class ctx path = let td = Hashtbl.find ctx.il_typedefs path in let cpath = get_path (TypeDef td) in let cflags = td.td_flags in let csuper = Option.map (fun e -> ilsig_t (ilsig_of_tdef_ref e)) td.td_extends in let cfields = List.map (convert_field ctx) td.td_field_list in let cmethods = List.map (convert_method ctx) td.td_method_list in let enclosing = Option.map (fun t -> get_path (TypeDef t)) td.td_extra_enclosing in let impl, types, nested, props, events, attrs = List.fold_left (fun (impl,types,nested,props,events,attrs) -> function | InterfaceImpl ii -> (ilsig_t (ilsig_of_tdef_ref ii.ii_interface)) :: impl,types,nested, props, events, attrs | GenericParam gp -> (impl, (convert_generic ctx gp) :: types, nested, props,events, attrs) | NestedClass nc -> assert (nc.nc_enclosing.td_id = td.td_id); (impl,types,(get_path (TypeDef nc.nc_nested)) :: nested, props, events, attrs) | PropertyMap pm -> assert (props = []); impl,types,nested,List.map (convert_prop ctx) pm.pm_property_list, events, attrs | EventMap em -> assert (events = []); (impl,types,nested,props,List.map (convert_event ctx) em.em_event_list, attrs) | CustomAttribute a -> impl,types,nested,props,events,(a :: attrs) | _ -> (impl,types,nested,props,events,attrs) ) ([],[],[],[],[],[]) (Hashtbl.find_all ctx.il_relations (ITypeDef, td.td_id)) in { cpath = cpath; cflags = cflags; csuper = csuper; cfields = cfields; cmethods = cmethods; cevents = events; cprops = props; cimplements = impl; ctypes = types; cenclosing = enclosing; cnested = nested; cattrs = attrs; } haxe_4.2.4.orig/libs/ilib/ilMetaWriter.ml0000644000175000017500000000454714146064214020225 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; open PeReader;; open IlMeta;; open IO;; (* encoding helpers *) let int_of_type_def_vis = function (* visibility flags - mask 0x7 *) | VPrivate -> 0x0 (* 0x0 *) | VPublic -> 0x1 (* 0x1 *) | VNestedPublic -> 0x2 (* 0x2 *) | VNestedPrivate -> 0x3 (* 0x3 *) | VNestedFamily -> 0x4 (* 0x4 *) | VNestedAssembly -> 0x5 (* 0x5 *) | VNestedFamAndAssem -> 0x6 (* 0x6 *) | VNestedFamOrAssem -> 0x7 (* 0x7 *) let int_of_type_def_layout = function (* layout flags - mask 0x18 *) | LAuto -> 0x0 (* 0x0 *) | LSequential -> 0x8 (* 0x8 *) | LExplicit -> 0x10 (* 0x10 *) let int_of_type_def_semantics props = List.fold_left (fun acc prop -> (match prop with (* semantics flags - mask 0x5A0 *) | SInterface -> 0x20 (* 0x20 *) | SAbstract -> 0x80 (* 0x80 *) | SSealed -> 0x100 (* 0x100 *) | SSpecialName -> 0x400 (* 0x400 *) ) lor acc ) 0 props let int_of_type_def_impl props = List.fold_left (fun acc prop -> (match prop with (* type implementation flags - mask 0x103000 *) | IImport -> 0x1000 (* 0x1000 *) | ISerializable -> 0x2000 (* 0x2000 *) | IBeforeFieldInit -> 0x00100000 (* 0x00100000 *) ) lor acc ) 0 props let int_of_type_def_string = function (* string formatting flags - mask 0x00030000 *) | SAnsi -> 0x0 (* 0x0 *) | SUnicode -> 0x00010000 (* 0x00010000 *) | SAutoChar -> 0x00020000 (* 0x00020000 *) let int_of_type_def_flags f = int_of_type_def_vis f.tdf_vis lor int_of_type_def_layout f.tdf_layout lor int_of_type_def_semantics f.tdf_semantics lor int_of_type_def_impl f.tdf_impl lor int_of_type_def_string f.tdf_string haxe_4.2.4.orig/libs/ilib/peData.ml0000644000175000017500000005343214146064214017010 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) (* This data is based on the Microsoft Portable Executable and Common Object File Format Specification Revision 8.3 *) type machine_type = | TUnknown (* 0 - unmanaged PE files only *) | Ti386 (* 0x014c - i386 *) | TR3000 (* 0x0162 - R3000 MIPS Little Endian *) | TR4000 (* 0x0166 - R4000 MIPS Little Endian *) | TR10000 (* 0x0168 - R10000 MIPS Little Endian *) | TWCeMipsV2 (* 0x0169 - MIPS Little Endian running MS Windows CE 2 *) | TAlpha (* 0x0184 - Alpha AXP *) | TSh3 (* 0x01a2 - SH3 Little Endian *) | TSh3Dsp (* 0x01a3 SH3DSP Little Endian *) | TSh3e (* 0x01a4 SH3E Little Endian *) | TSh4 (* 0x01a6 SH4 Little Endian *) | TSh5 (* 0x01a8 SH5 *) | TArm (* 0x1c0 ARM Little Endian *) | TArmN (* 0x1c4 ARMv7 (or higher) Thumb mode only Little Endian *) | TArm64 (* 0xaa64 - ARMv8 in 64-bit mode *) | TEbc (* 0xebc - EFI byte code *) | TThumb (* 0x1c2 ARM processor with Thumb decompressor *) | TAm33 (* 0x1d3 AM33 processor *) | TPowerPC (* 0x01f0 IBM PowerPC Little Endian *) | TPowerPCFP (* 0x01f1 IBM PowerPC with FPU *) | TItanium64 (* 0x0200 Intel IA64 (Itanium) *) | TMips16 (* 0x0266 MIPS *) | TAlpha64 (* 0x0284 Alpha AXP64 *) | TMipsFpu (* 0x0366 MIPS with FPU *) | TMipsFpu16 (* 0x0466 MIPS16 with FPU *) | TTriCore (* 0x0520 Infineon *) | TAmd64 (* 0x8664 AMD x64 and Intel E64T *) | TM32R (* 0x9041 M32R *) | TOSXAmd64 (* 0xC020 = 0x8664 xor 0x4644 OSX AMD x64 *) | TLinuxAmd64 (* 0xFD1D = 0x8664 xor 0x7B79 Linux AMD x64 *) type coff_prop = | RelocsStripped (* 0x1 *) (* image file only. Indicates the file contains no base relocations and *) (* must be loaded at its preferred base address. Should not be set for MPE files *) | ExecutableImage (* 0x2 *) (* Indicates that the file is an image file (EXE or DLL). Should be set for MPE files *) | LineNumsStripped (* 0x4 *) (* COFF line numbers have been removed. This flag should not be set for MPE files *) (* because they do not use the debug info embedded in the PE file itself. They are saved on PDB files *) | LocalSymsStripped (* 0x8 *) (* COFF symbol table entries for local symbols have been removed. It should be set for MPE files *) | AgressiveWsTrim (* 0x10 *) (* Agressively trim the working set. This flag should not be set for pure-IL MPE files *) | LargeAddressAware (* 0x20 *) (* Application can handle addresses beyond the 2GB range. This flag should not be set for *) (* pure-IL MPE files of versions 1 and 1.1, but can be set for v2.0 files *) | BytesReversedLO (* 0x80 *) (* Little endian. This flag should not be set for pure-IL MPE files *) | Machine32Bit (* 0x100 *) (* Machine is based on 32-bit architecture. This flag is usually set by the current *) (* versions of code generators producing PE files. V2.0+ can produce 64-bit specific images *) (* which don't have this flag set *) | DebugStripped (* 0x200 *) (* Debug information has been removed from the image file *) | RemovableRunFromSwap (* 0x400 *) (* If the image file is on removable media, copy and run it from swap file. *) (* This flag should no be set for pure-IL MPE files *) | NetRunFromSwap (* 0x800 *) (* If the image file is on a network, copy and run it from the swap file. *) (* This flag should no be set for pure-IL MPE files *) | FileSystem (* 0x1000 *) (* The image file is a system file (for example, a device driver) *) (* This flag should not be set for pure-IL MPE files *) | FileDll (* 0x2000 *) (* This image file is a DLL rather than an EXE. It cannot be directly run. *) | UpSystemOnly (* 0x4000 *) (* The image file should be run on an uniprocessor machine only. *) (* This flag should not be set for pure-IL MPE files *) | BytesReversedHI (* 0x8000 *) (* Big endian *) (* This flag should not be set for pure-IL MPE files *) (* represents a virtual address pointer. It's 64-bit on 64-bit executables, and 32-bit otherwise *) type pointer = int64 (* represents a memory index address on the target architecture. It's 64-bit on 64-bit executables, and 32-bit otherwise *) type size_t = pointer (* relative virtual address. *) (* it's always 32-bit - which means that PE/COFF files are still limited to the 4GB size *) type rva = int32 (* represents a PE file-bound memory index *) type size_t_file = int32 (* represents a file offset *) (* there's no point in defining it as int32, as file seek operations need an int *) type pointer_file = int type coff_header = { coff_machine : machine_type; (* offset 0 - size 2 . *) (* If the managed PE file is intended for various machine types (AnyCPU), it should be Ti386 *) coff_nsections : int; (* O2S2 *) coff_timestamp : int32; (* O4S4 *) coff_symbol_table_pointer : rva; (* O8S4 *) (* File pointer of the COFF symbol table. In managed PE files, it is 0 *) coff_nsymbols : int; (* O12S4 *) (* Number of entries in the COFF symbol table. Should be 0 in managed PE files *) coff_optheader_size: int; (* O16S2 *) (* Size of the PE header *) coff_props : coff_prop list; } let coff_default_exe_props = [ ExecutableImage; LineNumsStripped; LocalSymsStripped; (* Machine32Bit; *) ] let coff_default_dll_props = [ ExecutableImage; LineNumsStripped; LocalSymsStripped; (* Machine32Bit; *) FileDll ] type pe_magic = | P32 (* 0x10b *) | PRom (* 0x107 *) | P64 (* 0x20b - called PE32+ on the docs *) (* allows 64-bit address space while limiting the image size to 2 gb *) type subsystem = | SUnknown (* 0 *) | SNative (* 1 *) (* Device drivers and native windows processes *) | SWGui (* 2 *) (* Windows GUI subsystem *) | SWCui (* 3 *) (* Windows character subsystem *) | SPCui (* 7 *) (* Posix character subsystem *) | SWCeGui (* 9 *) (* Windows CE subsystem *) | SEfi (* 10 *) (* EFI application *) | SEfiBoot (* 11 *) (* EFI driver with boot services *) | SEfiRuntime (* 12 *) (* EFI driver with run-time services *) | SEfiRom (* 13 *) (* EFI ROM Image *) | SXbox (* 14 *) type dll_prop = | DDynamicBase (* 0x0040 *) (* DLL can be relocated at load time *) | DForceIntegrity (* 0x0080 *) (* Code integrity checks are enforced *) | DNxCompat (* 0x0100 *) (* Image is NX compatible *) | DNoIsolation (* 0x0200 *) (* Isolation-aware, but do not isolate the image *) | DNoSeh (* 0x0400 *) (* No structured exception handling *) | DNoBind (* 0x0800 *) (* Do not bind the image *) | DWdmDriver (* 0x2000 *) (* A WDM driver *) | DTerminalServer (* 0x8000 *) (* Terminal server aware *) type directory_type = | ExportTable (* .edata *) (* contains information about four other tables, which hold data describing *) (* unmanaged exports of the PE file. ILAsm and VC++ linker are capable of exposing *) (* the managed PE file as unmanaged exports *) | ImportTable (* .idata *) (* data on unmanaged imports consumed by the PE file. Only the VC++ linker makes *) (* use of this table, by marking the imported unmanaged external functions used by *) (* the unmanaged native code embedded in the same assembly. Other compilers only *) (* contain a single entry - that of the CLR entry function *) | ResourceTable (* .rsrc *) (* unmanaged resources embedded in the PE file. Managed resources don't use this *) | ExceptionTable (* .pdata *) (* unmanaged exceptions only *) | CertificateTable (* points to a table of attribute certificates, used for file authentication *) (* the first field of this entry is a file pointer rather than an RVA *) | RelocTable (* .reloc *) (* relocation table. We need to be aware of it if we use native TLS. *) (* only the VC++ linker uses native TLS' *) | DebugTable (* unmanaged debug data starting address and size. A managed PE file doesn't carry *) (* embedded debug data, so this data is either all zero or points to a 30-byte debug dir entry *) (* of type 2 (IMAGE_DEBUG_TYPE_CODEVIEW), which in turn points to a CodeView-style header, containing *) (* the path to the PDB debug file. *) | ArchitectureTable (* for i386, Itanium64 or AMD64, this data is set to all zeros *) | GlobalPointer (* the RVA of the value to be stored in the global pointer register. Size must be 0. *) (* if the target architecture (e.g. i386 or AMD64) don't use the concept of a global pointer, *) (* it is set to all zeros *) | TlsTable (* .tls *) (* The thread-local storage data. Only the VC++ linker and IL assembler produce code that use it *) | LoadConfigTable (* data specific to Windows NT OS *) | BoundImportTable (* array of bound import descriptors, each of which describes a DLL this image was bound *) (* at link-time, along with time stamps of the bindings. Iff they are up-to-date, the OS loader *) (* uses these bindings as a "shortcut" for API import *) | ImportAddressTable (* referenced from the Import Directory table (data directory 1) *) | DelayImport (* delay-load imports are DLLs described as implicit imports but loaded as explicit imports *) (* (via calls to the LoadLibrary API) *) | ClrRuntimeHeader (* .cormeta *) (* pointer to the clr_runtime_header *) | Reserved (* must be zero *) | Custom of int let directory_type_info = function | ExportTable -> 0, "ExportTable" | ImportTable -> 1, "ImportTable" | ResourceTable -> 2, "ResourceTable" | ExceptionTable -> 3, "ExceptionTable" | CertificateTable -> 4, "CertificateTable" | RelocTable -> 5, "RelocTable" | DebugTable -> 6, "DebugTable" | ArchitectureTable -> 7, "ArchTable" | GlobalPointer -> 8, "GlobalPointer" | TlsTable -> 9, "TlsTable" | LoadConfigTable -> 10, "LoadConfigTable" | BoundImportTable -> 11, "BuildImportTable" | ImportAddressTable -> 12, "ImportAddressTable" | DelayImport -> 13, "DelayImport" | ClrRuntimeHeader -> 14, "ClrRuntimeHeader" | Reserved -> 15, "Reserved" | Custom i -> i, "Custom" ^ (string_of_int i) let directory_type_of_int = function | 0 -> ExportTable | 1 -> ImportTable | 2 -> ResourceTable | 3 -> ExceptionTable | 4 -> CertificateTable | 5 -> RelocTable | 6 -> DebugTable | 7 -> ArchitectureTable | 8 -> GlobalPointer | 9 -> TlsTable | 10 -> LoadConfigTable | 11 -> BoundImportTable | 12 -> ImportAddressTable | 13 -> DelayImport | 14 -> ClrRuntimeHeader | 15 -> Reserved | i -> Custom i type section_prop = | SNoPad (* 0x8 *) (* the section should not be padded to the next boundary. *) (* OBSOLETE - replaced by SAlign1Bytes *) | SHasCode (* 0x20 *) (* the section contains executable code *) | SHasIData (* 0x40 *) (* contains initialized data *) | SHasData (* 0x80 *) (* contains uninitialized data *) | SHasLinkInfo (* 0x200 *) (* contains comments or other information. only valid for object files *) | SLinkRemove (* 0x1000 *) (* this will not become part of the image. only valid for object files *) | SGlobalRel (* 0x8000 *) (* contains data referenced through the global pointer (GP) *) | SHas16BitMem (* 0x20000 *) (* for ARM architecture. The section contains Thumb code *) | SAlign1Bytes (* 0x100000 *) (* align data on a 1-byte boundary. valid only for object files *) | SAlign2Bytes (* 0x200000 *) | SAlign4Bytes (* 0x300000 *) | SAlign8Bytes (* 0x400000 *) | SAlign16Bytes (* 0x500000 *) | SAlign32Bytes (* 0x600000 *) | SAlign64Bytes (* 0x700000 *) | SAlign128Bytes (* 0x800000 *) | SAlign256Bytes (* 0x900000 *) | SAlign512Bytes (* 0xA00000 *) | SAlign1024Bytes (* 0xB00000 *) | SAlign2048Bytes (* 0xC00000 *) | SAlign4096Bytes (* 0xD00000 *) | SAlign8192Bytes (* 0xE00000 *) | SHasExtRelocs (* 0x1000000 *) (* section contains extended relocations *) | SCanDiscard (* 0x02000000 *) (* section can be discarded as needed *) | SNotCached (* 0x04000000 *) (* section cannot be cached *) | SNotPaged (* 0x08000000 *) (* section is not pageable *) | SShared (* 0x10000000 *) (* section can be shared in memory *) | SExec (* 0x20000000 *) (* section can be executed as code *) | SRead (* 0x40000000 *) (* section can be read *) | SWrite (* 0x80000000 *) (* section can be written to *) type pe_section = { s_name : string; (* an 8-byte, null-padded UTF-8 encoded string *) s_vsize : size_t_file; (* the total size of the section when loaded into memory. *) (* if less than s_rawsize, the section is zero-padded *) (* should be set to 0 on object files *) s_vaddr : rva; (* the RVA of the beginning of the section *) s_raw_size : size_t_file; (* the size of the initialized data on disk, rounded up to a multiple *) (* of the file alignment value. If it's less than s_vsize, it should be *) (* zero filled. It may happen that rawsize is greater than vsize. *) s_raw_pointer : pointer_file; (* the file pointer to the first page of the section within the COFF file *) (* on executable images, this must be a multiple of file aignment value. *) (* for object files, it should be aligned on a 4byte boundary *) s_reloc_pointer : pointer_file; (* the file pointer to the beginning of relocation entries for this section *) (* this is set to zero for executable images or if there are no relocations *) s_line_num_pointer : pointer_file; (* the file pointer to the beginning of line-number entries for this section *) (* must be 0 : COFF debugging image is deprecated *) s_nrelocs : int; (* number of relocation entries *) s_nline_nums : int; (* number of line number entries *) s_props : section_prop list; (* properties of the section *) } (* The size of the PE header is not fixed. It depends on the number of data directories defined in the header *) (* and is specified in the optheader_size in the COFF header *) (* object files don't have this; but it's required for image files *) type pe_header = { pe_coff_header : coff_header; (* Standard fields *) pe_magic : pe_magic; pe_major : int; pe_minor : int; pe_code_size : int; (* size of the code section (.text) or the sum of all code sections, *) (* if multiple sections exist. The IL assembler always emits a single code section *) pe_init_size : int; pe_uinit_size : int; pe_entry_addr : rva; (* RVA of the beginning of the entry point function. For unmanaged DLLs, this can be 0 *) (* For managed PE files, this always points to the CLR invocation stub *) pe_base_code : rva; (* The address that is relative to the image base of the beginning-of-code section *) (* when it's loaded into memory *) pe_base_data : rva; (* The address that is relative to the image base of the beginning-of-data section *) (* when it's loaded into memory *) (* COFF Windows extension *) pe_image_base : pointer; (* The preferred address of the first byte of image when loaded into memory. *) (* Should be a multiple of 64K *) pe_section_alignment : int; (* The alignment in bytes of sections when they are loaded into memory *) (* It must be greater than or equal to FileAlignment. The default is the page size *) (* for the architecture *) (* x86 MPE files should have an alignment of 8KB, even though only 4KB would be needed *) (* for compatibility with 64-bits *) pe_file_alignment : int; (* The alignment factor in bytes that is used to align the raw data of sections *) (* in the image file. The value should be a POT between 512 and 64K. *) (* If secion_alignment is less than architecture's page size, file_alignment must match *) (* secion_alignment *) pe_major_osver : int; pe_minor_osver : int; pe_major_imgver : int; pe_minor_imgver : int; pe_major_subsysver : int; pe_minor_subsysver : int; pe_image_size : int; (* the size of the image in bytes, as the image is loaded into memory *) (* must be a multiple of section_alignment *) pe_headers_size : int; (* the combined size of an MSDOS stub, PE header, and section headers *) (* rounded up to a multiple of FileAlignment *) pe_checksum : int32; pe_subsystem : subsystem; pe_dll_props : dll_prop list; (* in MPE files of v1.0, always set to 0; In MPE of v1.1 and later, *) (* always set to 0x400 (DNoSeh) *) pe_stack_reserve : size_t; (* the size of the stack to reserve. Only pe_stack_commit is committed *) pe_stack_commit : size_t; (* the size of the stack to commit *) pe_heap_reserve : size_t; (* the size of the local heap space to reserve. Only pe_heap_commit is committed *) pe_heap_commit : size_t; (* the size of the heap to commit *) pe_ndata_dir : int; (* the number of data-directory entries in the remainder of the optional header *) (* should be at least 16. Although is possible to emit more than 16 data directories, *) (* all existing managed compilers emit exactly 16 data directories, with the last never *) (* used (reserved) *) pe_data_dirs : (rva * size_t_file) array; (* data directories are RVA's that point to sections on the PE that have special significance *) (* see directory_type docs *) (* sections *) pe_sections : pe_section array; } (* raw .idata table *) (* not used : only here for documentation purposes *) type idata_table_raw = { impr_lookup_table : rva; (* the RVA of the lookup table *) impr_timestamp : int32; (* on bound images, it's set to the timestamp of the DLL *) impr_fchain : int32; (* the index of the first forwarder reference - which are references *) (* that are both imported and exported *) impr_name : rva; (* the RVA to an ASCII string that contains the name of the DLL *) impr_address_table : rva; (* RVA of the import address table. The contents are identical to the imp_lookup_table *) (* until the image is bound *) } (* a symbol lookup can happen either by name, or by ordinal. *) (* lookup by name happens to be an extra indirection, as the loader *) (* uses the name to look up the export ordinal anyway. *) (* Most (if not all) MPE will do a lookup by name, though *) type symbol_lookup = | SName of int * string | SOrdinal of int type idata_table = { imp_name : string; (* ASCII string that contains the name of the DLL *) imp_imports : symbol_lookup list; } type clr_flag = | FIlOnly (* 0x1 *) (* the image file contains IL code only, with no embedded native unmanaged code *) (* this can cause some problems on WXP+, because the .reloc section is ignored when this flag is set *) (* e.g. if native TLS support is used. In this case the VC++ compiler unsets this flag *) | F32BitRequired (* 0x2 *) (* the file can be only loaded into a 32-bit process *) | FIlLibrary (* 0x4 *) (* obsolete *) | FSigned (* 0x8 *) (* the image file is protected with a strong name signature *) | FNativeEntry (* 0x10 *) (* the executable's entry point is an unmanaged method. *) (* the EntryPointToken / EntryPointRVA field of the CLR header *) (* contains the RVA of this native method *) | FTrackDebug (* 0x10000 *) (* the CLR loader is required to track debug information about the methods. This flag is not used *) type clr_header = { clr_cb : int; (* size of header *) clr_major : int; clr_minor : int; (* symbol table and startup information *) clr_meta : rva * size_t_file; clr_flags : clr_flag list; clr_entry_point : rva; (* metadata identifier (token) of the entry point for the image file *) (* can be 0 for DLL images. This field identifies a method belonging to this module *) (* or a module containing the entry point method. This field may contain RVA of the *) (* embedded native entry point method, if FNativeEntry flag is set *) (* binding information *) clr_res : rva * size_t_file; (* RVA of managed resources *) clr_sig : rva * size_t_file; (* RVA of the hash data for this PE file, used by the loader for binding and versioning *) (* regular fixup and binding information *) clr_codeman : rva * size_t_file; (* code manager table - RESERVED and should be 0 *) clr_vtable_fix : rva * size_t_file; (* RVA of an array of vtable fixups. Only VC++ linker and IL assembler produce data in this array *) clr_export_address : rva * size_t_file; (* rva of addresses of jump thunks. obsolete and should be set to 0 *) } (* unused structure: documentation purposes only *) type clr_stream_header = { str_offset : pointer_file; (* the (relative to the start of metadata) offset in the file for this stream *) str_size : size_t_file; (* the size of the stream in bytes *) str_name : string; (* name of the stream - a zero-terminated ASCII string no longer than 31 characters (plus 0 terminator) *) (* if the stream name is smaller, it can be reduced - but must be padded to the 4-byte boundary *) } (* unused structure: documentation purposes only *) type clr_meta_table = { (* storage signature *) meta_magic : string; (* always BSJB *) meta_major : int; meta_minor : int; (* meta_extra : int; *) (* reserved; always 0 *) meta_ver : string; (* encoded by first passing its length *) (* storage header *) (* meta_flags : int; *) (* reserved; always 0 *) meta_nstreams : int; (* number of streams *) meta_strings_stream : clr_stream_header; (* #Strings: a string heap containing the names of metadata items *) meta_blob_stream : clr_stream_header; (* #Blob: blob heap containing internal metadata binary object, such as default values, signatures, etc *) meta_guid_stream : clr_stream_header; (* #GUID: a GUID heap *) meta_us_stream : clr_stream_header; (* #US: user-defined strings *) meta_meta_stream : clr_stream_header; (* may be either: *) (* #~: compressed (optimized) metadata stream *) (* #-: uncompressed (unoptimized) metadata stream *) meta_streams : clr_stream_header list; (* custom streams *) } haxe_4.2.4.orig/libs/ilib/peDataDebug.ml0000644000175000017500000001344414146064214017756 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; open Printf;; let machine_type_s m = match m with | TUnknown -> "TUnknown" | Ti386 -> "Ti386" | TR3000 -> "TR3000" | TR4000 -> "TR4000" | TR10000 -> "TR10000" | TWCeMipsV2 -> "TWCeMipsV2" | TAlpha -> "TAlpha" | TSh3 -> "TSh3" | TSh3Dsp -> "TSh3Dsp" | TSh3e -> "TSh3e" | TSh4 -> "TSh4" | TSh5 -> "TSh5" | TArm -> "TArm" | TArmN -> "TArmN" | TArm64 -> "TArm64" | TEbc -> "TEbc" | TThumb -> "TThumb" | TAm33 -> "TAm33" | TPowerPC -> "TPowerPC" | TPowerPCFP -> "TPowerPCFP" | TItanium64 -> "TItanium64" | TMips16 -> "TMips16" | TAlpha64 -> "TAlpha64" | TMipsFpu -> "TMipsFpu" | TMipsFpu16 -> "TMipsFpu16" | TTriCore -> "TTriCore" | TAmd64 -> "TAmd64" | TM32R -> "TM32R" | TOSXAmd64 -> "TOSXAmd64" | TLinuxAmd64 -> "TLinuxAmd64" let coff_prop_s p = match p with | RelocsStripped -> "RelocsStripped" | ExecutableImage -> "ExecutableImage" | LineNumsStripped -> "LineNumsStripped" | LocalSymsStripped -> "LocalSymsStripped" | AgressiveWsTrim -> "AgressiveWsTrim" | LargeAddressAware -> "LargeAddressAware" | BytesReversedLO -> "BytesReversedLO" | Machine32Bit -> "Machine32Bit" | DebugStripped -> "DebugStripped" | RemovableRunFromSwap -> "RemovableRunFromSwap" | NetRunFromSwap -> "NetRunFromSwap" | FileSystem -> "FileSystem" | FileDll -> "FileDll" | UpSystemOnly -> "UpSystemOnly" | BytesReversedHI -> "BytesReversedHI" let coff_header_s h = sprintf "#COFF_HEADER\n\tmachine: %s\n\tnsections: %d\n\ttimestamp: %ld\n\tsymbol_tbl_pointer: %ld\n\tnsymbols: %d\n\toptheader_size: %x\n\tprops: [%s]\n" (machine_type_s h.coff_machine) h.coff_nsections h.coff_timestamp h.coff_symbol_table_pointer h.coff_nsymbols h.coff_optheader_size (String.concat ", " (List.map coff_prop_s h.coff_props)) let pe_magic_s = function | P32 -> "P32" | PRom -> "PRom" | P64 -> "P64" let subsystem_s = function | SUnknown -> "SUnknown" (* 0 *) | SNative -> "SNative" (* 1 *) | SWGui -> "SWGui" (* 2 *) | SWCui -> "SWCui" (* 3 *) | SPCui -> "SPCui" (* 7 *) | SWCeGui -> "SWCeGui" (* 9 *) | SEfi -> "SEfi" (* 10 *) | SEfiBoot -> "SEfiBoot" (* 11 *) | SEfiRuntime -> "SEfiRuntime" (* 12 *) | SEfiRom -> "SEfiRom" (* 13 *) | SXbox -> "SXbox" (* 14 *) let dll_prop_s = function | DDynamicBase -> "DDynamicBase" (* 0x0040 *) | DForceIntegrity -> "DForceIntegrity" (* 0x0080 *) | DNxCompat -> "DNxCompat" (* 0x0100 *) | DNoIsolation -> "DNoIsolation" (* 0x0200 *) | DNoSeh -> "DNoSeh" (* 0x0400 *) | DNoBind -> "DNoBind" (* 0x0800 *) | DWdmDriver -> "DWdmDriver" (* 0x2000 *) | DTerminalServer -> "DTerminalServer" (* 0x8000 *) let section_prop_s = function | SNoPad -> "SNoPad" | SHasCode -> "SHasCode" | SHasIData -> "SHasIData" | SHasData -> "SHasData" | SHasLinkInfo -> "SHasLinkInfo" | SLinkRemove -> "SLinkRemove" | SGlobalRel -> "SGlobalRel" | SHas16BitMem -> "SHas16BitMem" | SAlign1Bytes -> "SAlign1Bytes" | SAlign2Bytes -> "SAlign2Bytes" | SAlign4Bytes -> "SAlign4Bytes" | SAlign8Bytes -> "SAlign8Bytes" | SAlign16Bytes -> "SAlign16Bytes" | SAlign32Bytes -> "SAlign32Bytes" | SAlign64Bytes -> "SAlign64Bytes" | SAlign128Bytes -> "SAlign128Bytes" | SAlign256Bytes -> "SAlign256Bytes" | SAlign512Bytes -> "SAlign512Bytes" | SAlign1024Bytes -> "SAlign1024Bytes" | SAlign2048Bytes -> "SAlign2048Bytes" | SAlign4096Bytes -> "SAlign4096Bytes" | SAlign8192Bytes -> "SAlign8192Bytes" | SHasExtRelocs -> "SHasExtRelocs" | SCanDiscard -> "SCanDiscard" | SNotCached -> "SNotCached" | SNotPaged -> "SNotPaged" | SShared -> "SShared" | SExec -> "SExec" | SRead -> "SRead" | SWrite -> "SWrite" let pe_section_s s = Printf.sprintf "\t%s :\n\t\trva: %lx\n\t\traw size: %lx\n\t\tprops: [%s]" s.s_name s.s_vaddr s.s_raw_size (String.concat ", " (List.map section_prop_s s.s_props)) let data_dirs_s a = let lst = Array.to_list (Array.mapi (fun i (r,l) -> let _,s = directory_type_info (directory_type_of_int i) in Printf.sprintf "%s: %lx (%lx)" s r l ) a) in String.concat "\n\t\t" lst let pe_header_s h = sprintf "#PE_HEADER\n\tmagic: %s\n\tmajor.minor %d.%d\n\tsubsystem: %s\n\tdll props: [%s]\n\tndata_dir: %i\n\t\t%s\n#SECTIONS\n%s" (pe_magic_s h.pe_magic) h.pe_major h.pe_minor (subsystem_s h.pe_subsystem) (String.concat ", " (List.map dll_prop_s h.pe_dll_props)) h.pe_ndata_dir (data_dirs_s h.pe_data_dirs) (String.concat "\n" (List.map pe_section_s (Array.to_list h.pe_sections))) let symbol_lookup_s = function | SName (hint,s) -> "SName(" ^ string_of_int hint ^ ", " ^ s ^ ")" | SOrdinal i -> "SOrdinal(" ^ string_of_int i ^ ")" let idata_table_s t = sprintf "#IMPORT %s:\n\t%s" t.imp_name (String.concat "\n\t" (List.map symbol_lookup_s t.imp_imports)) let clr_flag_s = function | FIlOnly -> "FIlOnly" (* 0x1 *) | F32BitRequired -> "F32BitRequired" (* 0x2 *) | FIlLibrary -> "FIlLibrary" (* 0x4 *) | FSigned -> "FSigned" (* 0x8 *) | FNativeEntry -> "FNativeEntry" (* 0x10 *) | FTrackDebug -> "FTrackDebug" (* 0x10000 *) let clr_header_s h = sprintf "#CLR v%d.%d\n\tflags: %s" h.clr_major h.clr_minor (String.concat ", " (List.map clr_flag_s h.clr_flags)) haxe_4.2.4.orig/libs/ilib/peReader.ml0000644000175000017500000003513314146064214017337 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; open IO;; open ExtString;; open ExtList;; exception Error_message of string type reader_ctx = { ch : Pervasives.in_channel; i : IO.input; verbose : bool; } type ctx = { r : reader_ctx; pe_header : pe_header; read_word : IO.input -> pointer; } let error msg = raise (Error_message msg) let seek r pos = seek_in r.ch pos let pos r = Pervasives.pos_in r.ch let info r msg = if r.verbose then print_endline (msg()) let machine_type_of_int i = match i with | 0x0 -> TUnknown (* 0 - unmanaged PE files only *) | 0x014c -> Ti386 (* 0x014c - i386 *) | 0x0162 -> TR3000 (* 0x0162 - R3000 MIPS Little Endian *) | 0x0166 -> TR4000 (* 0x0166 - R4000 MIPS Little Endian *) | 0x0168 -> TR10000 (* 0x0168 - R10000 MIPS Little Endian *) | 0x0169 -> TWCeMipsV2 (* 0x0169 - MIPS Litlte Endian running MS Windows CE 2 *) | 0x0184 -> TAlpha (* 0x0184 - Alpha AXP *) | 0x01a2 -> TSh3 (* 0x01a2 - SH3 Little Endian *) | 0x01a3 -> TSh3Dsp (* 0x01a3 SH3DSP Little Endian *) | 0x01a4 -> TSh3e (* 0x01a4 SH3E Little Endian *) | 0x01a6 -> TSh4 (* 0x01a6 SH4 Little Endian *) | 0x01a8 -> TSh5 | 0x01c0 -> TArm (* 0x1c0 ARM Little Endian *) | 0x01c2 -> TThumb (* 0x1c2 ARM processor with Thumb decompressor *) | 0x01c4 -> TArmN (* 0x1c0 ARM Little Endian *) | 0xaa64 -> TArm64 | 0xebc -> TEbc | 0x01d3 -> TAm33 (* 0x1d3 AM33 processor *) | 0x01f0 -> TPowerPC (* 0x01f0 IBM PowerPC Little Endian *) | 0x01f1 -> TPowerPCFP (* 0x01f1 IBM PowerPC with FPU *) | 0x0200 -> TItanium64 (* 0x0200 Intel IA64 (Itanium( *) | 0x0266 -> TMips16 (* 0x0266 MIPS *) | 0x0284 -> TAlpha64 (* 0x0284 Alpha AXP64 *) | 0x0366 -> TMipsFpu (* 0x0366 MIPS with FPU *) | 0x0466 -> TMipsFpu16 (* 0x0466 MIPS16 with FPU *) | 0x0520 -> TTriCore (* 0x0520 Infineon *) | 0x8664 -> TAmd64 (* 0x8664 AMD x64 and Intel E64T *) | 0x9041 -> TM32R (* 0x9041 M32R *) | 0xC020 -> TOSXAmd64 (* 0xC020 OSX AMD x64 *) | 0xFD1D -> TLinuxAmd64 (* 0xFD1D Linux AMD x64 *) | _ -> assert false let coff_props_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x1 -> RelocsStripped (* 0x1 *) | 0x2 -> ExecutableImage (* 0x2 *) | 0x4 -> LineNumsStripped (* 0x4 *) | 0x8 -> LocalSymsStripped (* 0x8 *) | 0x10 -> AgressiveWsTrim (* 0x10 *) | 0x20 -> LargeAddressAware (* 0x20 *) | 0x80 -> BytesReversedLO (* 0x80 *) | 0x100 -> Machine32Bit (* 0x100 *) | 0x200 -> DebugStripped (* 0x200 *) | 0x400 -> RemovableRunFromSwap (* 0x400 *) | 0x800 -> NetRunFromSwap (* 0x800 *) | 0x1000 -> FileSystem (* 0x1000 *) | 0x2000 -> FileDll (* 0x2000 *) | 0x4000 -> UpSystemOnly (* 0x4000 *) | 0x8000 -> BytesReversedHI (* 0x8000 *) | _ -> assert false) :: acc else acc) [] [0x1;0x2;0x4;0x8;0x10;0x20;0x80;0x100;0x200;0x400;0x800;0x1000;0x2000;0x4000;0x8000] let section_props_of_int32 props = List.fold_left (fun acc i -> if (Int32.logand props i) = i then (match i with | 0x8l -> SNoPad | 0x20l -> SHasCode | 0x40l -> SHasIData | 0x80l -> SHasData | 0x200l -> SHasLinkInfo | 0x1000l -> SLinkRemove | 0x8000l -> SGlobalRel | 0x20000l -> SHas16BitMem | 0x100000l -> SAlign1Bytes | 0x200000l -> SAlign2Bytes | 0x300000l -> SAlign4Bytes | 0x400000l -> SAlign8Bytes | 0x500000l -> SAlign16Bytes | 0x600000l -> SAlign32Bytes | 0x700000l -> SAlign64Bytes | 0x800000l -> SAlign128Bytes | 0x900000l -> SAlign256Bytes | 0xA00000l -> SAlign512Bytes | 0xB00000l -> SAlign1024Bytes | 0xC00000l -> SAlign2048Bytes | 0xD00000l -> SAlign4096Bytes | 0xE00000l -> SAlign8192Bytes | 0x1000000l -> SHasExtRelocs | 0x02000000l -> SCanDiscard | 0x04000000l -> SNotCached | 0x08000000l -> SNotPaged | 0x10000000l -> SShared | 0x20000000l -> SExec | 0x40000000l -> SRead | 0x80000000l -> SWrite | _ -> assert false) :: acc else acc) [] [ 0x8l; 0x20l; 0x40l; 0x80l; 0x200l; 0x1000l; 0x8000l; 0x20000l; 0x100000l; 0x200000l; 0x300000l; 0x400000l; 0x500000l; 0x600000l; 0x700000l; 0x800000l; 0x900000l; 0xA00000l; 0xB00000l; 0xC00000l; 0xD00000l; 0xE00000l; 0x1000000l; 0x02000000l; 0x04000000l; 0x08000000l; 0x10000000l; 0x20000000l; 0x40000000l; 0x80000000l; ] let subsystem_of_int i = match i with | 0 -> SUnknown (* 0 *) | 1 -> SNative (* 1 *) | 2 -> SWGui (* 2 *) | 3 -> SWCui (* 3 *) | 7 -> SPCui (* 7 *) | 9 -> SWCeGui (* 9 *) | 10 -> SEfi (* 10 *) | 11 -> SEfiBoot (* 11 *) | 12 -> SEfiRuntime (* 12 *) | 13 -> SEfiRom (* 13 *) | 14 -> SXbox (* 14 *) | _ -> error ("Unknown subsystem " ^ string_of_int i) let dll_props_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x0040 -> DDynamicBase (* 0x0040 *) | 0x0080 -> DForceIntegrity (* 0x0080 *) | 0x0100 -> DNxCompat (* 0x0100 *) | 0x0200 -> DNoIsolation (* 0x0200 *) | 0x0400 -> DNoSeh (* 0x0400 *) | 0x0800 -> DNoBind (* 0x0800 *) | 0x2000 -> DWdmDriver (* 0x2000 *) | 0x8000 -> DTerminalServer (* 0x8000 *) | _ -> assert false) :: acc else acc) [] [0x40;0x80;0x100;0x200;0x400;0x800;0x2000;0x8000] let pe_magic_of_int i = match i with | 0x10b -> P32 | 0x107 -> PRom | 0x20b -> P64 | _ -> error ("Unknown PE magic number: " ^ string_of_int i) let clr_flags_of_int iprops = List.fold_left (fun acc i -> if (iprops land i) = i then (match i with | 0x1 -> FIlOnly (* 0x1 *) | 0x2 -> F32BitRequired (* 0x2 *) | 0x4 -> FIlLibrary (* 0x4 *) | 0x8 -> FSigned (* 0x8 *) | 0x10 -> FNativeEntry (* 0x10 *) | 0x10000 -> FTrackDebug (* 0x10000 *) | _ -> assert false) :: acc else acc) [] [0x1;0x2;0x4;0x8;0x10;0x10000] let get_dir dir ctx = let idx,name = directory_type_info dir in try ctx.pe_header.pe_data_dirs.(idx) with | Invalid_argument _ -> error (Printf.sprintf "The directory '%s' of index '%i' is required but is missing on this file" name idx) let read_rva = read_real_i32 let read_word is64 i = if is64 then read_i64 i else Int64.logand (Int64.of_int32 (read_real_i32 i)) 0xFFFFFFFFL let read_coff_header i = let machine = machine_type_of_int (read_ui16 i) in let nsections = read_ui16 i in let stamp = read_real_i32 i in let symbol_table_pointer = read_rva i in let nsymbols = read_i32 i in let optheader_size = read_ui16 i in let props = read_ui16 i in let props = coff_props_of_int (props) in { coff_machine = machine; coff_nsections = nsections; coff_timestamp = stamp; coff_symbol_table_pointer = symbol_table_pointer; coff_nsymbols = nsymbols; coff_optheader_size = optheader_size; coff_props = props; } let read_pe_header r header = let i = r.i in let sections_offset = (pos r) + header.coff_optheader_size in let magic = pe_magic_of_int (read_ui16 i) in let major = read_byte i in let minor = read_byte i in let code_size = read_i32 i in let init_size = read_i32 i in let uinit_size = read_i32 i in let entry_addr = read_rva i in let base_code = read_rva i in let base_data, read_word = match magic with | P32 | PRom -> read_rva i, read_word false | P64 -> Int32.zero, read_word true in (* COFF Windows extension *) let image_base = read_word i in let section_alignment = read_i32 i in let file_alignment = read_i32 i in let major_osver = read_ui16 i in let minor_osver = read_ui16 i in let major_imgver = read_ui16 i in let minor_imgver = read_ui16 i in let major_subsysver = read_ui16 i in let minor_subsysver = read_ui16 i in ignore (read_i32 i); (* reserved *) let image_size = read_i32 i in let headers_size = read_i32 i in let checksum = read_real_i32 i in let subsystem = subsystem_of_int (read_ui16 i) in let dll_props = dll_props_of_int (read_ui16 i) in let stack_reserve = read_word i in let stack_commit = read_word i in let heap_reserve = read_word i in let heap_commit = read_word i in ignore (read_i32 i); (* reserved *) let ndata_dir = read_i32 i in let data_dirs = Array.init ndata_dir (fun n -> let addr = read_rva i in let size = read_rva i in addr,size) in (* sections *) let nsections = header.coff_nsections in seek r sections_offset; let sections = Array.init nsections (fun n -> let name = nread_string i 8 in let name = try let index = String.index name '\x00' in String.sub name 0 index with | Not_found -> name in (*TODO check for slash names *) let vsize = read_rva i in let vaddr = read_rva i in let raw_size = read_rva i in let raw_pointer = read_i32 i in let reloc_pointer = read_i32 i in let line_num_pointer = read_i32 i in let nrelocs = read_ui16 i in let nline_nums = read_ui16 i in let props = section_props_of_int32 (read_rva i) in { s_name = name; s_vsize =vsize; s_vaddr =vaddr; s_raw_size =raw_size; s_raw_pointer =raw_pointer; s_reloc_pointer =reloc_pointer; s_line_num_pointer =line_num_pointer; s_nrelocs =nrelocs; s_nline_nums =nline_nums; s_props =props; } ) in { pe_coff_header = header; pe_magic = magic; pe_major = major; pe_minor = minor; pe_code_size = code_size; pe_init_size = init_size; pe_uinit_size = uinit_size; pe_entry_addr = entry_addr; pe_base_code = base_code; pe_base_data = base_data; pe_image_base = image_base; pe_section_alignment = section_alignment; pe_file_alignment = file_alignment; pe_major_osver = major_osver; pe_minor_osver = minor_osver; pe_major_imgver = major_imgver; pe_minor_imgver = minor_imgver; pe_major_subsysver = major_subsysver; pe_minor_subsysver = minor_subsysver; pe_image_size = image_size; pe_headers_size = headers_size; pe_checksum = checksum; pe_subsystem = subsystem; pe_dll_props = dll_props; pe_stack_reserve = stack_reserve; pe_stack_commit = stack_commit; pe_heap_reserve = heap_reserve; pe_heap_commit = heap_commit; pe_ndata_dir = ndata_dir; pe_data_dirs = data_dirs; pe_sections = sections; } let create_r ch props = let verbose = PMap.mem "IL_VERBOSE" props in let i = IO.input_channel ch in { ch = ch; i = i; verbose = verbose; } (* converts an RVA into a file offset. *) let convert_rva ctx rva = let sections = ctx.pe_header.pe_sections in let nsections = Array.length sections in let sec = (* linear search. TODO maybe binary search for many sections? *) let rec loop n = if n >= nsections then error (Printf.sprintf "The RVA %lx is outside sections bounds!" rva); let sec = sections.(n) in if rva >= sec.s_vaddr && (rva < (Int32.add sec.s_vaddr sec.s_raw_size)) then sec else loop (n+1) in loop 0 in let diff = Int32.to_int (Int32.sub rva sec.s_vaddr) in sec.s_raw_pointer + diff let seek_rva ctx rva = seek ctx.r (convert_rva ctx rva) let read_cstring i = let ret = Buffer.create 8 in let rec loop () = let chr = read i in if chr = '\x00' then Buffer.contents ret else begin Buffer.add_char ret chr; loop() end in loop() (* reads import data *) let read_idata ctx = match get_dir ImportTable ctx with | 0l,_ | _,0l -> [] | rva,size -> seek_rva ctx rva; let i = ctx.r.i in let rec loop acc = let lookup_table = read_rva i in if lookup_table = Int32.zero then acc else begin let timestamp = read_real_i32 i in let fchain = read_real_i32 i in let name_rva = read_rva i in let addr_table = read_rva i in ignore addr_table; ignore fchain; ignore timestamp; loop ((lookup_table,name_rva) :: acc) end in let tables = loop [] in List.rev_map (function (lookup_table,name_rva) -> seek_rva ctx lookup_table; let is_64 = ctx.pe_header.pe_magic = P64 in let imports_data = if not is_64 then let rec loop acc = let flags = read_real_i32 i in if flags = Int32.zero then acc else begin let is_ordinal = Int32.logand flags 0x80000000l = 0x80000000l in loop ( (is_ordinal, if is_ordinal then Int32.logand flags 0xFFFFl else Int32.logand flags 0x7FFFFFFFl) :: acc ) end in loop [] else let rec loop acc = let flags = read_i64 i in if flags = Int64.zero then acc else begin let is_ordinal = Int64.logand flags 0x8000000000000000L = 0x8000000000000000L in loop ( (is_ordinal, Int64.to_int32 (if is_ordinal then Int64.logand flags 0xFFFFL else Int64.logand flags 0x7FFFFFFFL)) :: acc ) end in loop [] in let imports = List.rev_map (function | true, ord -> SOrdinal (Int32.to_int ord) | false, rva -> seek_rva ctx rva; let hint = read_ui16 i in SName (hint, read_cstring i) ) imports_data in seek_rva ctx name_rva; let name = read_cstring i in { imp_name = name; imp_imports = imports; } ) tables let has_clr_header ctx = match get_dir ClrRuntimeHeader ctx with | 0l,_ | _,0l -> false | _ -> true let read_clr_header ctx = match get_dir ClrRuntimeHeader ctx with | 0l,_ | _,0l -> error "This PE file does not have managed content" | rva,size -> seek_rva ctx rva; let i = ctx.r.i in let cb = read_i32 i in let major = read_ui16 i in let minor = read_ui16 i in let read_tbl i = let rva = read_rva i in let size = read_real_i32 i in rva,size in let meta = read_tbl i in let corflags = clr_flags_of_int (read_i32 i) in let entry_point = read_rva i in let res = read_tbl i in let clrsig = read_tbl i in let codeman = read_tbl i in let vtable_fix = read_tbl i in let export_addr = read_tbl i in { clr_cb = cb; clr_major = major; clr_minor = minor; clr_meta = meta; clr_flags = corflags; clr_entry_point = entry_point; clr_res = res; clr_sig = clrsig; clr_codeman = codeman; clr_vtable_fix = vtable_fix; clr_export_address = export_addr; } let read r = let i = r.i in if read i <> 'M' || read i <> 'Z' then error "MZ magic header not found: Is the target file really a PE?"; seek r 0x3c; let pe_sig_offset = read_i32 i in seek r pe_sig_offset; if really_nread_string i 4 <> "PE\x00\x00" then error "Invalid PE header signature: PE expected"; let header = read_coff_header i in let pe_header = read_pe_header r header in { r = r; pe_header = pe_header; read_word = read_word (pe_header.pe_magic = P64); } haxe_4.2.4.orig/libs/ilib/peWriter.ml0000644000175000017500000001342514146064214017411 0ustar andyandy00000000000000(* * This file is part of ilLib * Copyright (c)2004-2013 Haxe Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open PeData;; open IO;; open ExtString;; open ExtList;; exception Error_message of string let error msg = raise (Error_message msg) type 'a writer_ctx = { out : 'a IO.output; } let int_of_machine_type t = match t with | TUnknown -> 0x0 (* 0 - unmanaged PE files only *) | Ti386 -> 0x014c (* 0x014c - i386 *) | TR3000 -> 0x0162 (* 0x0162 - R3000 MIPS Little Endian *) | TR4000 -> 0x0166 (* 0x0166 - R4000 MIPS Little Endian *) | TR10000 -> 0x0168 (* 0x0168 - R10000 MIPS Little Endian *) | TWCeMipsV2 -> 0x0169 (* 0x0169 - MIPS Litlte Endian running MS Windows CE 2 *) | TAlpha -> 0x0184 (* 0x0184 - Alpha AXP *) | TSh3 -> 0x01a2 (* 0x01a2 - SH3 Little Endian *) | TSh3Dsp -> 0x01a3 (* 0x01a3 SH3DSP Little Endian *) | TSh3e -> 0x01a4 (* 0x01a4 SH3E Little Endian *) | TSh4 -> 0x01a6 (* 0x01a6 SH4 Little Endian *) | TSh5 -> 0x01a8 | TArm -> 0x01c0 (* 0x1c0 ARM Little Endian *) | TArmN -> 0x01c4 (* 0x1c0 ARM Little Endian *) | TArm64 -> 0xaa64 (* 0x1c0 ARM Little Endian *) | TEbc -> 0xebc | TThumb -> 0x01c2 (* 0x1c2 ARM processor with Thumb decompressor *) | TAm33 -> 0x01d3 (* 0x1d3 AM33 processor *) | TPowerPC -> 0x01f0 (* 0x01f0 IBM PowerPC Little Endian *) | TPowerPCFP -> 0x01f1 (* 0x01f1 IBM PowerPC with FPU *) | TItanium64 -> 0x0200 (* 0x0200 Intel IA64 (Itanium( *) | TMips16 -> 0x0266 (* 0x0266 MIPS *) | TAlpha64 -> 0x0284 (* 0x0284 Alpha AXP64 *) | TMipsFpu -> 0x0366 (* 0x0366 MIPS with FPU *) | TMipsFpu16 -> 0x0466 (* 0x0466 MIPS16 with FPU *) | TTriCore -> 0x0520 (* 0x0520 Infineon *) | TAmd64 -> 0x8664 (* 0x8664 AMD x64 and Intel E64T *) | TM32R -> 0x9041 (* 0x9041 M32R *) | TOSXAmd64 -> 0xC020 (* 0xC020 = 0x8664 xor 0x4644 OSX AMD x64 *) | TLinuxAmd64 -> 0xFD1D (* 0xFD1D = 0x8664 xor 0x7B79 Linux AMD x64 *) let int_of_coff_props props = List.fold_left (fun acc prop -> (match prop with | RelocsStripped -> 0x1 (* 0x1 *) | ExecutableImage -> 0x2 (* 0x2 *) | LineNumsStripped -> 0x4 (* 0x4 *) | LocalSymsStripped -> 0x8 (* 0x8 *) | AgressiveWsTrim -> 0x10 (* 0x10 *) | LargeAddressAware -> 0x20 (* 0x20 *) | BytesReversedLO -> 0x80 (* 0x80 *) | Machine32Bit -> 0x100 (* 0x100 *) | DebugStripped -> 0x200 (* 0x200 *) | RemovableRunFromSwap -> 0x400 (* 0x400 *) | NetRunFromSwap -> 0x800 (* 0x800 *) | FileSystem -> 0x1000 (* 0x1000 *) | FileDll -> 0x2000 (* 0x2000 *) | UpSystemOnly -> 0x4000 (* 0x4000 *) | BytesReversedHI -> 0x8000 (* 0x8000 *) ) lor acc ) 0 props let int32_of_section_prop props = List.fold_left (fun acc prop -> Int32.logor (match prop with | SNoPad -> 0x8l (* 0x8 *) | SHasCode -> 0x20l (* 0x20 *) | SHasIData -> 0x40l (* 0x40 *) | SHasData -> 0x80l (* 0x80 *) | SHasLinkInfo -> 0x200l (* 0x200 *) | SLinkRemove -> 0x1000l (* 0x1000 *) | SGlobalRel -> 0x8000l (* 0x8000 *) | SHas16BitMem -> 0x20000l (* 0x20000 *) | SAlign1Bytes -> 0x100000l (* 0x100000 *) | SAlign2Bytes -> 0x200000l (* 0x200000 *) | SAlign4Bytes -> 0x300000l (* 0x300000 *) | SAlign8Bytes -> 0x400000l (* 0x400000 *) | SAlign16Bytes -> 0x500000l (* 0x500000 *) | SAlign32Bytes -> 0x600000l (* 0x600000 *) | SAlign64Bytes -> 0x700000l (* 0x700000 *) | SAlign128Bytes -> 0x800000l (* 0x800000 *) | SAlign256Bytes -> 0x900000l (* 0x900000 *) | SAlign512Bytes -> 0xA00000l (* 0xA00000 *) | SAlign1024Bytes -> 0xB00000l (* 0xB00000 *) | SAlign2048Bytes -> 0xC00000l (* 0xC00000 *) | SAlign4096Bytes -> 0xD00000l (* 0xD00000 *) | SAlign8192Bytes -> 0xE00000l (* 0xE00000 *) | SHasExtRelocs -> 0x1000000l (* 0x1000000 *) | SCanDiscard -> 0x02000000l (* 0x02000000 *) | SNotCached -> 0x04000000l (* 0x04000000 *) | SNotPaged -> 0x08000000l (* 0x08000000 *) | SShared -> 0x10000000l (* 0x10000000 *) | SExec -> 0x20000000l (* 0x20000000 *) | SRead -> 0x40000000l (* 0x40000000 *) | SWrite -> 0x80000000l (* 0x80000000 *) ) acc ) 0l props let int_of_pe_magic m = match m with | P32 -> 0x10b | PRom -> 0x107 | P64 -> 0x20b let int_of_subsystem s = match s with | SUnknown -> 0 (* 0 *) | SNative -> 1 (* 1 *) | SWGui -> 2 (* 2 *) | SWCui -> 3 (* 3 *) | SPCui -> 7 (* 7 *) | SWCeGui -> 9 (* 9 *) | SEfi -> 10 (* 10 *) | SEfiBoot -> 11 (* 11 *) | SEfiRuntime -> 12 (* 12 *) | SEfiRom -> 13 (* 13 *) | SXbox -> 14 (* 14 *) let int_of_dll_props props = List.fold_left (fun acc prop -> (match prop with | DDynamicBase -> 0x0040 (* 0x0040 *) | DForceIntegrity -> 0x0080 (* 0x0080 *) | DNxCompat -> 0x0100 (* 0x0100 *) | DNoIsolation -> 0x0200 (* 0x0200 *) | DNoSeh -> 0x0400 (* 0x0400 *) | DNoBind -> 0x0800 (* 0x0800 *) | DWdmDriver -> 0x2000 (* 0x2000 *) | DTerminalServer -> 0x8000 (* 0x8000 *) ) lor acc ) 0 props let int_of_clr_flags props = List.fold_left (fun acc prop -> (match prop with | FIlOnly -> 0x1 (* 0x1 *) | F32BitRequired -> 0x2 (* 0x2 *) | FIlLibrary -> 0x4 (* 0x4 *) | FSigned -> 0x8 (* 0x8 *) | FNativeEntry -> 0x10 (* 0x10 *) | FTrackDebug -> 0x10000 (* 0x10000 *) ) lor acc ) 0 props haxe_4.2.4.orig/libs/javalib/Makefile0000644000175000017500000000104014146064214017375 0ustar andyandy00000000000000OCAMLOPT=ocamlopt OCAMLC=ocamlc SRC=jData.ml jReader.ml jWriter.ml all: bytecode native native: javalib.cmxa bytecode: javalib.cma javalib.cmxa: $(SRC) ocamlfind $(OCAMLOPT) -g -package extlib -safe-string -a -o javalib.cmxa $(SRC) javalib.cma: $(SRC) ocamlfind $(OCAMLC) -g -package extlib -safe-string -a -o javalib.cma $(SRC) clean: rm -rf javalib.cmxa javalib.cma javalib.lib javalib.a $(wildcard *.cmx) $(wildcard *.obj) $(wildcard *.o) $(wildcard *.cmi) $(wildcard *.cmo) .PHONY: all bytecode native clean Makefile: ; $(SRC): ; haxe_4.2.4.orig/libs/javalib/dune0000644000175000017500000000012514146064214016616 0ustar andyandy00000000000000(include_subdirs no) (library (name javalib) (libraries extlib) (wrapped false) )haxe_4.2.4.orig/libs/javalib/jData.ml0000644000175000017500000002105114146064214017316 0ustar andyandy00000000000000(* * This file is part of JavaLib * Copyright (c)2004-2012 Nicolas Cannasse and Caue Waneck * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type jpath = (string list) * string type jversion = int * int (* minor + major *) (** unqualified names cannot have the characters '.', ';', '[' or '/' *) type unqualified_name = string type jwildcard = | WExtends (* + *) | WSuper (* - *) | WNone type jtype_argument = | TType of jwildcard * jsignature | TAny (* * *) and jsignature = | TByte (* B *) | TChar (* C *) | TDouble (* D *) | TFloat (* F *) | TInt (* I *) | TLong (* J *) | TShort (* S *) | TBool (* Z *) | TObject of jpath * jtype_argument list (* L Classname *) | TObjectInner of (string list) * (string * jtype_argument list) list (* L Classname ClassTypeSignatureSuffix *) | TArray of jsignature * int option (* [ *) | TMethod of jmethod_signature (* ( *) | TTypeParameter of string (* T *) (* ( jsignature list ) ReturnDescriptor (| V | jsignature) *) and jmethod_signature = jsignature list * jsignature option (* InvokeDynamic-specific: Method handle *) type reference_type = | RGetField (* constant must be ConstField *) | RGetStatic (* constant must be ConstField *) | RPutField (* constant must be ConstField *) | RPutStatic (* constant must be ConstField *) | RInvokeVirtual (* constant must be Method *) | RInvokeStatic (* constant must be Method *) | RInvokeSpecial (* constant must be Method *) | RNewInvokeSpecial (* constant must be Method with name *) | RInvokeInterface (* constant must be InterfaceMethod *) (* TODO *) type bootstrap_method = int type jconstant = (** references a class or an interface - jpath must be encoded as StringUtf8 *) | ConstClass of jpath (* tag = 7 *) (** field reference *) | ConstField of (jpath * unqualified_name * jsignature) (* tag = 9 *) (** method reference; string can be special "" and "" values *) | ConstMethod of (jpath * unqualified_name * jmethod_signature) (* tag = 10 *) (** interface method reference *) | ConstInterfaceMethod of (jpath * unqualified_name * jmethod_signature) (* tag = 11 *) (** constant values *) | ConstString of string (* tag = 8 *) | ConstInt of int32 (* tag = 3 *) | ConstFloat of float (* tag = 4 *) | ConstLong of int64 (* tag = 5 *) | ConstDouble of float (* tag = 6 *) (** name and type: used to represent a field or method, without indicating which class it belongs to *) | ConstNameAndType of unqualified_name * jsignature (** UTF8 encoded strings. Note that when reading/writing, take into account Utf8 modifications of java *) (* (http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.7) *) | ConstUtf8 of string (** invokeDynamic-specific *) | ConstMethodHandle of (reference_type * jconstant) (* tag = 15 *) | ConstMethodType of jmethod_signature (* tag = 16 *) | ConstDynamic of (bootstrap_method * unqualified_name * jsignature) (* tag = 17 *) | ConstInvokeDynamic of (bootstrap_method * unqualified_name * jsignature) (* tag = 18 *) | ConstModule of unqualified_name (* tag = 19 *) | ConstPackage of unqualified_name (* tag = 20 *) | ConstUnusable type jaccess_flag = | JPublic (* 0x0001 *) | JPrivate (* 0x0002 *) | JProtected (* 0x0004 *) | JStatic (* 0x0008 *) | JFinal (* 0x0010 *) | JSynchronized (* 0x0020 *) | JVolatile (* 0x0040 *) | JTransient (* 0x0080 *) (** added if created by the compiler *) | JSynthetic (* 0x1000 *) | JEnum (* 0x4000 *) | JUnusable (* should not be present *) (** class flags *) | JSuper (* 0x0020 *) | JInterface (* 0x0200 *) | JAbstract (* 0x0400 *) | JAnnotation (* 0x2000 *) | JModule (* 0x8000 *) (** method flags *) | JBridge (* 0x0040 *) | JVarArgs (* 0x0080 *) | JNative (* 0x0100 *) | JStrict (* 0x0800 *) type jaccess = jaccess_flag list (* type parameter name, extends signature, implements signatures *) type jtypes = (string * jsignature option * jsignature list) list type jannotation = { ann_type : jsignature; ann_elements : (string * jannotation_value) list; } and jannotation_value = | ValConst of jsignature * jconstant (* B, C, D, E, F, I, J, S, Z, s *) | ValEnum of jsignature * string (* e *) | ValClass of jsignature (* c *) (* V -> Void *) | ValAnnotation of jannotation (* @ *) | ValArray of jannotation_value list (* [ *) type jlocal = { ld_start_pc : int; ld_length : int; ld_name : string; ld_descriptor : string; ld_index : int; } type jattribute = | AttrDeprecated | AttrVisibleAnnotations of jannotation list | AttrInvisibleAnnotations of jannotation list | AttrLocalVariableTable of jlocal list | AttrMethodParameters of (string * int) list | AttrUnknown of string * string type jcode = jattribute list (* TODO *) type jfield_kind = | JKField | JKMethod type jfield = { jf_name : string; jf_kind : jfield_kind; (* signature, as used by the vm *) jf_vmsignature : jsignature; (* actual signature, as used in java code *) jf_signature : jsignature; jf_throws : jsignature list; jf_types : jtypes; jf_flags : jaccess; jf_attributes : jattribute list; jf_constant : jconstant option; jf_code : jcode option; } type jclass = { cversion : jversion; cpath : jpath; csuper : jsignature; cflags : jaccess; cinterfaces : jsignature list; cfields : jfield list; cmethods : jfield list; cattributes : jattribute list; cinner_types : (jpath * jpath option * string option * jaccess) list; ctypes : jtypes; } (* reading/writing *) type utf8ref = int type classref = int type nametyperef = int type dynref = int type bootstrapref = int type jconstant_raw = | KClass of utf8ref (* 7 *) | KFieldRef of (classref * nametyperef) (* 9 *) | KMethodRef of (classref * nametyperef) (* 10 *) | KInterfaceMethodRef of (classref * nametyperef) (* 11 *) | KString of utf8ref (* 8 *) | KInt of int32 (* 3 *) | KFloat of float (* 4 *) | KLong of int64 (* 5 *) | KDouble of float (* 6 *) | KNameAndType of (utf8ref * utf8ref) (* 12 *) | KUtf8String of string (* 1 *) | KMethodHandle of (reference_type * dynref) (* 15 *) | KMethodType of utf8ref (* 16 *) | KDynamic of (bootstrapref * nametyperef) (* 17 *) | KInvokeDynamic of (bootstrapref * nametyperef) (* 18 *) | KModule of utf8ref (* 19 *) | KPackage of utf8ref (* 20 *) | KUnusable (* jData debugging *) let is_override_attrib = (function (* TODO: pass anotations as @:meta *) | AttrVisibleAnnotations ann -> List.exists (function | { ann_type = TObject( (["java";"lang"], "Override"), [] ) } -> true | _ -> false ) ann | _ -> false ) let is_override field = List.exists is_override_attrib field.jf_attributes let path_s = function | (pack,name) -> String.concat "." (pack @ [name]) let rec s_sig = function | TByte (* B *) -> "byte" | TChar (* C *) -> "char" | TDouble (* D *) -> "double" | TFloat (* F *) -> "float" | TInt (* I *) -> "int" | TLong (* J *) -> "long" | TShort (* S *) -> "short" | TBool (* Z *) -> "bool" | TObject(path,args) -> path_s path ^ s_args args | TObjectInner (sl, sjargl) -> String.concat "." sl ^ "." ^ (String.concat "." (List.map (fun (s,arg) -> s ^ s_args arg) sjargl)) | TArray (s,i) -> s_sig s ^ "[" ^ (match i with | None -> "" | Some i -> string_of_int i) ^ "]" | TMethod (sigs, sopt) -> (match sopt with | None -> "" | Some s -> s_sig s ^ " ") ^ "(" ^ String.concat ", " (List.map s_sig sigs) ^ ")" | TTypeParameter s -> s and s_args = function | [] -> "" | args -> "<" ^ String.concat ", " (List.map (fun t -> match t with | TAny -> "*" | TType (wc, s) -> (match wc with | WNone -> "" | WExtends -> "+" | WSuper -> "-") ^ (s_sig s)) args) ^ ">" let s_field f = (if is_override f then "override " else "") ^ s_sig f.jf_signature ^ " " ^ f.jf_name let s_fields fs = "{ \n\t" ^ String.concat "\n\t" (List.map s_field fs) ^ "\n}" haxe_4.2.4.orig/libs/javalib/jReader.ml0000644000175000017500000005024014146064214017651 0ustar andyandy00000000000000(* * This file is part of JavaLib * Copyright (c)2004-2012 Nicolas Cannasse and Caue Waneck * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open JData;; open IO.BigEndian;; open ExtString;; open ExtList;; exception Error_message of string let error msg = raise (Error_message msg) let get_reference_type i constid = match i with | 1 -> RGetField | 2 -> RGetStatic | 3 -> RPutField | 4 -> RPutStatic | 5 -> RInvokeVirtual | 6 -> RInvokeStatic | 7 -> RInvokeSpecial | 8 -> RNewInvokeSpecial | 9 -> RInvokeInterface | _ -> error (string_of_int constid ^ ": Invalid reference type " ^ string_of_int i) let parse_constant max idx ch = let cid = IO.read_byte ch in let error() = error (string_of_int idx ^ ": Invalid constant " ^ string_of_int cid) in let index() = let n = read_ui16 ch in if n = 0 || n >= max then error(); n in match cid with | 7 -> KClass (index()) | 9 -> let n1 = index() in let n2 = index() in KFieldRef (n1,n2) | 10 -> let n1 = index() in let n2 = index() in KMethodRef (n1,n2) | 11 -> let n1 = index() in let n2 = index() in KInterfaceMethodRef (n1,n2) | 8 -> KString (index()) | 3 -> KInt (read_real_i32 ch) | 4 -> let f = Int32.float_of_bits (read_real_i32 ch) in KFloat f | 5 -> KLong (read_i64 ch) | 6 -> KDouble (read_double ch) | 12 -> let n1 = index() in let n2 = index() in KNameAndType (n1, n2) | 1 -> let len = read_ui16 ch in let str = IO.nread_string ch len in (* TODO: correctly decode modified UTF8 *) KUtf8String str | 15 -> let reft = get_reference_type (IO.read_byte ch) idx in let dynref = index() in KMethodHandle (reft, dynref) | 16 -> KMethodType (index()) | 17 -> let bootstrapref = read_ui16 ch in (* not index *) let nametyperef = index() in KDynamic (bootstrapref, nametyperef) | 18 -> let bootstrapref = read_ui16 ch in (* not index *) let nametyperef = index() in KInvokeDynamic (bootstrapref, nametyperef) | 19 -> KModule (index()) | 20 -> KPackage (index()) | n -> error() let expand_path s = let rec loop remaining acc = match remaining with | name :: [] -> List.rev acc, name | v :: tl -> loop tl (v :: acc) | _ -> assert false in loop (String.nsplit s "/") [] let rec parse_type_parameter_part s = match s.[0] with | '*' -> TAny, 1 | c -> let wildcard, i = match c with | '+' -> WExtends, 1 | '-' -> WSuper, 1 | _ -> WNone, 0 in let jsig, l = parse_signature_part (String.sub s i (String.length s - 1)) in (TType (wildcard, jsig), l + i) and parse_signature_part s = let len = String.length s in if len = 0 then raise Exit; match s.[0] with | 'B' -> TByte, 1 | 'C' -> TChar, 1 | 'D' -> TDouble, 1 | 'F' -> TFloat, 1 | 'I' -> TInt, 1 | 'J' -> TLong, 1 | 'S' -> TShort, 1 | 'Z' -> TBool, 1 | 'L' -> (try let orig_s = s in let rec loop start i acc = match s.[i] with | '/' -> loop (i + 1) (i + 1) (String.sub s start (i - start) :: acc) | ';' | '.' -> List.rev acc, (String.sub s start (i - start)), [], (i) | '<' -> let name = String.sub s start (i - start) in let rec loop_params i acc = let s = String.sub s i (len - i) in match s.[0] with | '>' -> List.rev acc, i + 1 | _ -> let tp, l = parse_type_parameter_part s in loop_params (l + i) (tp :: acc) in let params, _end = loop_params (i + 1) [] in List.rev acc, name, params, (_end) | _ -> loop start (i+1) acc in let pack, name, params, _end = loop 1 1 [] in let rec loop_inner i acc = match s.[i] with | '.' -> let pack, name, params, _end = loop (i+1) (i+1) [] in if pack <> [] then error ("Inner types must not define packages. For '" ^ orig_s ^ "'."); loop_inner _end ( (name,params) :: acc ) | ';' -> List.rev acc, i + 1 | c -> error ("End of complex type signature expected after type parameter. Got '" ^ Char.escaped c ^ "' for '" ^ orig_s ^ "'." ); in let inners, _end = loop_inner _end [] in match inners with | [] -> TObject((pack,name), params), _end | _ -> TObjectInner( pack, (name,params) :: inners ), _end with Invalid_string -> raise Exit) | '[' -> let p = ref 1 in while !p < String.length s && s.[!p] >= '0' && s.[!p] <= '9' do incr p; done; let size = (if !p > 1 then Some (int_of_string (String.sub s 1 (!p - 1))) else None) in let s , l = parse_signature_part (String.sub s !p (String.length s - !p)) in TArray (s,size) , l + !p | '(' -> let p = ref 1 in let args = ref [] in while !p < String.length s && s.[!p] <> ')' do let a , l = parse_signature_part (String.sub s !p (String.length s - !p)) in args := a :: !args; p := !p + l; done; incr p; if !p >= String.length s then raise Exit; let ret , l = (match s.[!p] with 'V' -> None , 1 | _ -> let s, l = parse_signature_part (String.sub s !p (String.length s - !p)) in Some s, l ) in TMethod (List.rev !args,ret) , !p + l | 'T' -> (try let s1 , _ = String.split s ";" in let len = String.length s1 in TTypeParameter (String.sub s1 1 (len - 1)) , len + 1 with Invalid_string -> raise Exit) | _ -> raise Exit let parse_signature s = try let sign , l = parse_signature_part s in if String.length s <> l then raise Exit; sign with Exit -> error ("Invalid signature '" ^ s ^ "'") let parse_method_signature s = match parse_signature s with | (TMethod m) -> m | _ -> error ("Unexpected signature '" ^ s ^ "'. Expecting method") let parse_formal_type_params s = match s.[0] with | '<' -> let rec read_id i = match s.[i] with | ':' | '>' -> i | _ -> read_id (i + 1) in let len = String.length s in let rec parse_params idx acc = let idi = read_id (idx + 1) in let id = String.sub s (idx + 1) (idi - idx - 1) in (* next must be a : *) (match s.[idi] with | ':' -> () | _ -> error ("Invalid formal type signature character: " ^ Char.escaped s.[idi] ^ " ; from " ^ s)); let ext, l = match s.[idi + 1] with | ':' | '>' -> None, idi + 1 | _ -> let sgn, l = parse_signature_part (String.sub s (idi + 1) (len - idi - 1)) in Some sgn, l + idi + 1 in let rec loop idx acc = match s.[idx] with | ':' -> let ifacesig, ifacei = parse_signature_part (String.sub s (idx + 1) (len - idx - 1)) in loop (idx + ifacei + 1) (ifacesig :: acc) | _ -> acc, idx in let ifaces, idx = loop l [] in let acc = (id, ext, ifaces) :: acc in if s.[idx] = '>' then List.rev acc, idx + 1 else parse_params (idx - 1) acc in parse_params 0 [] | _ -> [], 0 let parse_throws s = let len = String.length s in let rec loop idx acc = if idx > len then raise Exit else if idx = len then acc, idx else match s.[idx] with | '^' -> let tsig, l = parse_signature_part (String.sub s (idx+1) (len - idx - 1)) in loop (idx + l + 1) (tsig :: acc) | _ -> acc, idx in loop 0 [] let parse_complete_method_signature s = try let len = String.length s in let tparams, i = parse_formal_type_params s in let sign, l = parse_signature_part (String.sub s i (len - i)) in let throws, l2 = parse_throws (String.sub s (i+l) (len - i - l)) in if (i + l + l2) <> len then raise Exit; match sign with | TMethod msig -> tparams, msig, throws | _ -> raise Exit with Exit -> error ("Invalid method extended signature '" ^ s ^ "'") let rec expand_constant consts i = let unexpected i = error (string_of_int i ^ ": Unexpected constant type") in let expand_path n = match Array.get consts n with | KUtf8String s -> expand_path s | _ -> unexpected n in let expand_cls n = match expand_constant consts n with | ConstClass p -> p | _ -> unexpected n in let expand_nametype n = match expand_constant consts n with | ConstNameAndType (s,jsig) -> s, jsig | _ -> unexpected n in let expand_string n = match Array.get consts n with | KUtf8String s -> s | _ -> unexpected n in let expand_nametype_m n = match expand_nametype n with | (n, TMethod m) -> n, m | _ -> unexpected n in let expand ncls nt = match expand_cls ncls, expand_nametype nt with | path, (n, m) -> path, n, m in let expand_m ncls nt = match expand_cls ncls, expand_nametype_m nt with | path, (n, m) -> path, n, m in match Array.get consts i with | KClass utf8ref -> ConstClass (expand_path utf8ref) | KFieldRef (classref, nametyperef) -> ConstField (expand classref nametyperef) | KMethodRef (classref, nametyperef) -> ConstMethod (expand_m classref nametyperef) | KInterfaceMethodRef (classref, nametyperef) -> ConstInterfaceMethod (expand_m classref nametyperef) | KString utf8ref -> ConstString (expand_string utf8ref) | KInt i32 -> ConstInt i32 | KFloat f -> ConstFloat f | KLong i64 -> ConstLong i64 | KDouble d -> ConstDouble d | KNameAndType (n, t) -> ConstNameAndType(expand_string n, parse_signature (expand_string t)) | KUtf8String s -> ConstUtf8 s (* TODO: expand UTF8 characters *) | KMethodHandle (reference_type, dynref) -> ConstMethodHandle (reference_type, expand_constant consts dynref) | KMethodType utf8ref -> ConstMethodType (parse_method_signature (expand_string utf8ref)) | KDynamic(bootstrapref, nametyperef) -> let n, t = expand_nametype nametyperef in ConstDynamic(bootstrapref, n, t) | KInvokeDynamic (bootstrapref, nametyperef) -> let n, t = expand_nametype nametyperef in ConstInvokeDynamic(bootstrapref, n, t) | KModule n -> ConstModule (expand_string n) | KPackage n -> ConstPackage (expand_string n) | KUnusable -> ConstUnusable let parse_access_flags ch all_flags = let fl = read_ui16 ch in let flags = ref [] in let fbit = ref 0 in List.iter (fun f -> if fl land (1 lsl !fbit) <> 0 then begin flags := f :: !flags; if f = JUnusable then error ("Unusable flag: " ^ string_of_int fl) end; incr fbit ) all_flags; (*if fl land (0x4000 - (1 lsl !fbit)) <> 0 then error ("Invalid access flags " ^ string_of_int fl);*) !flags let get_constant c n = if n < 1 || n >= Array.length c then error ("Invalid constant index " ^ string_of_int n); match c.(n) with | ConstUnusable -> error "Unusable constant index"; | x -> x let get_class consts ch = match get_constant consts (read_ui16 ch) with | ConstClass n -> n | _ -> error "Invalid class index" let get_string consts ch = let i = read_ui16 ch in match get_constant consts i with | ConstUtf8 s -> s | _ -> error ("Invalid string index " ^ string_of_int i) let rec parse_element_value consts ch = let tag = IO.read_byte ch in match Char.chr tag with | 'B' | 'C' | 'D' | 'F' | 'I' | 'J' | 'S' | 'Z' | 's' -> let jsig = match (Char.chr tag) with | 's' -> TObject( (["java";"lang"],"String"), [] ) | tag -> fst (parse_signature_part (Char.escaped tag)) in ValConst(jsig, get_constant consts (read_ui16 ch)) | 'e' -> let path = parse_signature (get_string consts ch) in let name = get_string consts ch in ValEnum (path, name) | 'c' -> let name = get_string consts ch in let jsig = if name = "V" then TObject(([], "Void"), []) else parse_signature name in ValClass jsig | '@' -> ValAnnotation (parse_annotation consts ch) | '[' -> let num_vals = read_ui16 ch in ValArray (List.init (num_vals) (fun _ -> parse_element_value consts ch)) | tag -> error ("Invalid element value: '" ^ Char.escaped tag ^ "'") and parse_ann_element consts ch = let name = get_string consts ch in let element_value = parse_element_value consts ch in name, element_value and parse_annotation consts ch = let anntype = parse_signature (get_string consts ch) in let count = read_ui16 ch in { ann_type = anntype; ann_elements = List.init count (fun _ -> parse_ann_element consts ch) } let parse_attribute on_special consts ch = let aname = get_string consts ch in let error() = error ("Malformed attribute " ^ aname) in let alen = read_i32 ch in match aname with | "Deprecated" -> if alen <> 0 then error(); Some (AttrDeprecated) | "LocalVariableTable" -> let len = read_ui16 ch in let locals = List.init len (fun _ -> let start_pc = read_ui16 ch in let length = read_ui16 ch in let name = get_string consts ch in let descriptor = get_string consts ch in let index = read_ui16 ch in { ld_start_pc = start_pc; ld_length = length; ld_name = name; ld_descriptor = descriptor; ld_index = index } ) in Some (AttrLocalVariableTable locals) | "MethodParameters" -> let len = IO.read_byte ch in let parameters = List.init len (fun _ -> let name = get_string consts ch in let flags = read_ui16 ch in (name,flags) ) in Some (AttrMethodParameters parameters) | "RuntimeVisibleAnnotations" -> let anncount = read_ui16 ch in Some (AttrVisibleAnnotations (List.init anncount (fun _ -> parse_annotation consts ch))) | "RuntimeInvisibleAnnotations" -> let anncount = read_ui16 ch in Some (AttrInvisibleAnnotations (List.init anncount (fun _ -> parse_annotation consts ch))) | _ -> let do_default () = Some (AttrUnknown (aname,IO.nread_string ch alen)) in match on_special with | None -> do_default() | Some fn -> fn consts ch aname alen do_default let parse_attributes ?on_special consts ch count = let rec loop i acc = if i >= count then List.rev acc else match parse_attribute on_special consts ch with | None -> loop (i + 1) acc | Some attrib -> loop (i + 1) (attrib :: acc) in loop 0 [] let parse_field kind consts ch = let all_flags = match kind with | JKField -> [JPublic; JPrivate; JProtected; JStatic; JFinal; JUnusable; JVolatile; JTransient; JSynthetic; JEnum] | JKMethod -> [JPublic; JPrivate; JProtected; JStatic; JFinal; JSynchronized; JBridge; JVarArgs; JNative; JUnusable; JAbstract; JStrict; JSynthetic] in let acc = ref (parse_access_flags ch all_flags) in let name = get_string consts ch in let sign = parse_signature (get_string consts ch) in let jsig = ref sign in let throws = ref [] in let types = ref [] in let constant = ref None in let code = ref None in let attrib_count = read_ui16 ch in let attribs = parse_attributes ~on_special:(fun _ _ aname alen do_default -> match kind, aname with | JKField, "ConstantValue" -> constant := Some (get_constant consts (read_ui16 ch)); None | JKField, "Synthetic" -> if not (List.mem JSynthetic !acc) then acc := !acc @ [JSynthetic]; None | JKField, "Signature" -> let s = get_string consts ch in jsig := parse_signature s; None | JKMethod, "Code" -> ignore(read_ui16 ch); (* max stack *) ignore(read_ui16 ch); (* max locals *) let len = read_i32 ch in ignore(IO.nread_string ch len); (* code *) let len = read_ui16 ch in for i = 0 to len - 1 do ignore(IO.nread_string ch 8); done; (* exceptions *) let attrib_count = read_ui16 ch in let attribs = parse_attributes consts ch attrib_count in code := Some attribs; None | JKMethod, "Exceptions" -> let num = read_ui16 ch in throws := List.init num (fun _ -> TObject(get_class consts ch,[])); None | JKMethod, "Signature" -> let s = get_string consts ch in let tp, sgn, thr = parse_complete_method_signature s in if thr <> [] then throws := thr; types := tp; jsig := TMethod(sgn); None | _ -> do_default() ) consts ch attrib_count in { jf_name = name; jf_kind = kind; (* signature, as used by the vm *) jf_vmsignature = sign; (* actual signature, as used in java code *) jf_signature = !jsig; jf_throws = !throws; jf_types = !types; jf_flags = !acc; jf_attributes = attribs; jf_constant = !constant; jf_code = !code; } let parse_class ch = if read_real_i32 ch <> 0xCAFEBABEl then error "Invalid header"; let minorv = read_ui16 ch in let majorv = read_ui16 ch in let constant_count = read_ui16 ch in let const_big = ref true in let consts = Array.init constant_count (fun idx -> if !const_big then begin const_big := false; KUnusable end else let c = parse_constant constant_count idx ch in (match c with KLong _ | KDouble _ -> const_big := true | _ -> ()); c ) in let consts = Array.mapi (fun i _ -> expand_constant consts i) consts in let flags = parse_access_flags ch [JPublic; JUnusable; JUnusable; JUnusable; JFinal; JSuper; JUnusable; JUnusable; JUnusable; JInterface; JAbstract; JUnusable; JSynthetic; JAnnotation; JEnum; JModule] in let this = get_class consts ch in let super_idx = read_ui16 ch in let super = match super_idx with | 0 -> TObject((["java";"lang"], "Object"), []); | idx -> match get_constant consts idx with | ConstClass path -> TObject(path,[]) | _ -> error "Invalid super index" in let interfaces = List.init (read_ui16 ch) (fun _ -> TObject (get_class consts ch, [])) in let fields = List.init (read_ui16 ch) (fun _ -> parse_field JKField consts ch) in let methods = List.init (read_ui16 ch) (fun _ -> parse_field JKMethod consts ch) in let inner = ref [] in let types = ref [] in let super = ref super in let interfaces = ref interfaces in let attribs = read_ui16 ch in let attribs = parse_attributes ~on_special:(fun _ _ aname alen do_default -> match aname with | "InnerClasses" -> let count = read_ui16 ch in let classes = List.init count (fun _ -> let inner_ci = get_class consts ch in let outeri = read_ui16 ch in let outer_ci = match outeri with | 0 -> None | _ -> match get_constant consts outeri with | ConstClass n -> Some n | _ -> error "Invalid class index" in let inner_namei = read_ui16 ch in let inner_name = match inner_namei with | 0 -> None | _ -> match get_constant consts inner_namei with | ConstUtf8 s -> Some s | _ -> error ("Invalid string index " ^ string_of_int inner_namei) in let flags = parse_access_flags ch [JPublic; JPrivate; JProtected; JStatic; JFinal; JUnusable; JUnusable; JUnusable; JUnusable; JInterface; JAbstract; JSynthetic; JAnnotation; JEnum] in inner_ci, outer_ci, inner_name, flags ) in inner := classes; None | "Signature" -> let s = get_string consts ch in let formal, idx = parse_formal_type_params s in types := formal; let s = String.sub s idx (String.length s - idx) in let len = String.length s in let sup, idx = parse_signature_part s in let rec loop idx acc = if idx = len then acc else begin let s = String.sub s idx (len - idx) in let iface, i2 = parse_signature_part s in loop (idx + i2) (iface :: acc) end in interfaces := loop idx []; super := sup; None | _ -> do_default() ) consts ch attribs in IO.close_in ch; { cversion = majorv, minorv; cpath = this; csuper = !super; cflags = flags; cinterfaces = !interfaces; cfields = fields; cmethods = methods; cattributes = attribs; cinner_types = !inner; ctypes = !types; } haxe_4.2.4.orig/libs/javalib/jWriter.ml0000644000175000017500000002472114146064214017730 0ustar andyandy00000000000000(* * This file is part of JavaLib * Copyright (c)2004-2012 Nicolas Cannasse and Caue Waneck * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open JData;; open IO.BigEndian;; open IO;; open ExtString;; open ExtList;; exception Writer_error_message of string type context = { cpool : unit IO.output; mutable ccount : int; ch : string IO.output; mutable constants : (jconstant,int) PMap.t; } let error msg = raise (Writer_error_message msg) let get_reference_type i = match i with | RGetField -> 1 | RGetStatic -> 2 | RPutField -> 3 | RPutStatic -> 4 | RInvokeVirtual -> 5 | RInvokeStatic -> 6 | RInvokeSpecial -> 7 | RNewInvokeSpecial -> 8 | RInvokeInterface -> 9 let encode_path ctx (pack,name) = String.concat "/" (pack @ [name]) let rec encode_param ctx ch param = match param with | TAny -> write_byte ch (Char.code '*') | TType(w, s) -> (match w with | WExtends -> write_byte ch (Char.code '+') | WSuper -> write_byte ch (Char.code '-') | WNone -> ()); encode_sig_part ctx ch s and encode_sig_part ctx ch jsig = match jsig with | TByte -> write_byte ch (Char.code 'B') | TChar -> write_byte ch (Char.code 'C') | TDouble -> write_byte ch (Char.code 'D') | TFloat -> write_byte ch (Char.code 'F') | TInt -> write_byte ch (Char.code 'I') | TLong -> write_byte ch (Char.code 'J') | TShort -> write_byte ch (Char.code 'S') | TBool -> write_byte ch (Char.code 'Z') | TObject(path, params) -> write_byte ch (Char.code 'L'); write_string ch (encode_path ctx path); if params <> [] then begin write_byte ch (Char.code '<'); List.iter (encode_param ctx ch) params; write_byte ch (Char.code '>') end; write_byte ch (Char.code ';') | TObjectInner(pack, inners) -> write_byte ch (Char.code 'L'); List.iter (fun p -> write_string ch p; write_byte ch (Char.code '/') ) pack; let first = ref true in List.iter (fun (name,params) -> (if !first then first := false else write_byte ch (Char.code '.')); write_string ch name; if params <> [] then begin write_byte ch (Char.code '<'); List.iter (encode_param ctx ch) params; write_byte ch (Char.code '>') end; ) inners; write_byte ch (Char.code ';') | TArray(s,size) -> write_byte ch (Char.code '['); (match size with | Some size -> write_string ch (string_of_int size); | None -> ()); encode_sig_part ctx ch s | TMethod(args, ret) -> write_byte ch (Char.code '('); List.iter (encode_sig_part ctx ch) args; (match ret with | None -> write_byte ch (Char.code 'V') | Some jsig -> encode_sig_part ctx ch jsig) | TTypeParameter name -> write_byte ch (Char.code 'T'); write_string ch name; write_byte ch (Char.code ';') let encode_sig ctx jsig = let buf = IO.output_string() in encode_sig_part ctx buf jsig; close_out buf let write_utf8 ch s = String.iter (fun c -> let c = Char.code c in if c = 0 then begin write_byte ch 0xC0; write_byte ch 0x80 end else write_byte ch c ) s let rec const ctx c = try PMap.find c ctx.constants with | Not_found -> let ret = ctx.ccount in (match c with (** references a class or an interface - jpath must be encoded as StringUtf8 *) | ConstClass path -> (* tag = 7 *) write_byte ctx.cpool 7; write_ui16 ctx.cpool (const ctx (ConstUtf8 (encode_path ctx path))) (** field reference *) | ConstField (jpath, unqualified_name, jsignature) (* tag = 9 *) -> write_byte ctx.cpool 9; write_ui16 ctx.cpool (const ctx (ConstClass jpath)); write_ui16 ctx.cpool (const ctx (ConstNameAndType (unqualified_name, jsignature))) (** method reference; string can be special "" and "" values *) | ConstMethod (jpath, unqualified_name, jmethod_signature) (* tag = 10 *) -> write_byte ctx.cpool 10; write_ui16 ctx.cpool (const ctx (ConstClass jpath)); write_ui16 ctx.cpool (const ctx (ConstNameAndType (unqualified_name, TMethod jmethod_signature))) (** interface method reference *) | ConstInterfaceMethod (jpath, unqualified_name, jmethod_signature) (* tag = 11 *) -> write_byte ctx.cpool 11; write_ui16 ctx.cpool (const ctx (ConstClass jpath)); write_ui16 ctx.cpool (const ctx (ConstNameAndType (unqualified_name, TMethod jmethod_signature))) (** constant values *) | ConstString s (* tag = 8 *) -> write_byte ctx.cpool 8; write_ui16 ctx.cpool (const ctx (ConstUtf8 s)) | ConstInt i (* tag = 3 *) -> write_byte ctx.cpool 3; write_real_i32 ctx.cpool i | ConstFloat f (* tag = 4 *) -> write_byte ctx.cpool 4; (match classify_float f with | FP_normal | FP_subnormal | FP_zero -> write_real_i32 ctx.cpool (Int32.bits_of_float f) | FP_infinite when f > 0.0 -> write_real_i32 ctx.cpool 0x7f800000l | FP_infinite -> write_real_i32 ctx.cpool 0xff800000l | FP_nan -> write_real_i32 ctx.cpool 0x7f800001l) | ConstLong i (* tag = 5 *) -> write_byte ctx.cpool 5; write_i64 ctx.cpool i; | ConstDouble d (* tag = 6 *) -> write_byte ctx.cpool 6; write_double ctx.cpool d; ctx.ccount <- ctx.ccount + 1 (** name and type: used to represent a field or method, without indicating which class it belongs to *) | ConstNameAndType (unqualified_name, jsignature) -> write_byte ctx.cpool 12; write_ui16 ctx.cpool (const ctx (ConstUtf8 (unqualified_name))); write_ui16 ctx.cpool (const ctx (ConstUtf8 (encode_sig ctx jsignature))) (** UTF8 encoded strings. Note that when reading/writing, take into account Utf8 modifications of java *) (* (http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.7) *) | ConstUtf8 s -> write_byte ctx.cpool 1; write_ui16 ctx.cpool (String.length s); write_utf8 ctx.cpool s (** invokeDynamic-specific *) | ConstMethodHandle (reference_type, jconstant) (* tag = 15 *) -> write_byte ctx.cpool 15; write_byte ctx.cpool (get_reference_type reference_type); write_ui16 ctx.cpool (const ctx jconstant) | ConstMethodType jmethod_signature (* tag = 16 *) -> write_byte ctx.cpool 16; write_ui16 ctx.cpool (const ctx (ConstUtf8 (encode_sig ctx (TMethod jmethod_signature)))) | ConstDynamic (bootstrap_method, unqualified_name, jsignature) (* tag = 17 *) -> write_byte ctx.cpool 17; write_ui16 ctx.cpool bootstrap_method; write_ui16 ctx.cpool (const ctx (ConstNameAndType(unqualified_name, jsignature))) | ConstInvokeDynamic (bootstrap_method, unqualified_name, jsignature) (* tag = 18 *) -> write_byte ctx.cpool 18; write_ui16 ctx.cpool bootstrap_method; write_ui16 ctx.cpool (const ctx (ConstNameAndType(unqualified_name, jsignature))) | ConstModule unqualified_name (* tag = 19 *) -> write_byte ctx.cpool 19; write_ui16 ctx.cpool (const ctx (ConstUtf8 (unqualified_name))); | ConstPackage unqualified_name (* tag = 20 *) -> write_byte ctx.cpool 20; write_ui16 ctx.cpool (const ctx (ConstUtf8 (unqualified_name))); | ConstUnusable -> assert false); ctx.ccount <- ret + 1; ret let write_const ctx ch cconst = write_ui16 ch (const ctx cconst) ;; let write_formal_type_params ctx ch tparams = write_byte ch (Char.code '<'); List.iter (fun (name,ext,impl) -> write_string ch name; (match ext with | None -> () | Some jsig -> write_byte ch (Char.code ':'); write_string ch (encode_sig ctx jsig)); List.iter (fun jsig -> write_byte ch (Char.code ':'); write_string ch (encode_sig ctx jsig) ) impl ) tparams; write_byte ch (Char.code '>'); ;; let write_complete_method_signature ctx ch (tparams : jtypes) msig throws = if tparams <> [] then write_formal_type_params ctx ch tparams; write_string ch (encode_sig ctx (TMethod(msig))); if throws <> [] then List.iter (fun jsig -> write_byte ch (Char.code '^'); write_string ch (encode_sig ctx jsig) ) throws ;; let write_access_flags ctx ch all_flags flags = let value = List.fold_left (fun acc flag -> try acc lor (Hashtbl.find all_flags flag) with Not_found -> error ("Not found flag: " ^ (string_of_int (Obj.magic flag))) ) 0 flags in write_ui16 ch value ;; let rec write_ann_element ctx ch (name,eval) = write_const ctx ch (ConstUtf8 name); write_element_value ctx ch eval and write_annotation ctx ch ann = write_const ctx ch (ConstUtf8 (encode_sig ctx ann.ann_type)); write_ui16 ch (List.length ann.ann_elements); List.iter (write_ann_element ctx ch) ann.ann_elements and write_element_value ctx ch value = match value with | ValConst(jsig, cconst) -> (match jsig with | TObject((["java";"lang"],"String"), []) -> write_byte ch (Char.code 's') | TByte | TChar | TDouble | TFloat | TInt | TLong | TShort | TBool -> write_string ch (encode_sig ctx jsig) | _ -> let s = encode_sig ctx jsig in error ("Invalid signature " ^ s ^ " for constant value")); write_ui16 ch (const ctx cconst) | ValEnum(jsig,name) -> write_byte ch (Char.code 'e'); write_const ctx ch (ConstUtf8 (encode_sig ctx jsig)); write_const ctx ch (ConstUtf8 name) | ValClass(jsig) -> write_byte ch (Char.code 'c'); let esig = match jsig with | TObject(([],"Void"),[]) | TObject((["java";"lang"],"Void"),[]) -> "V" | _ -> encode_sig ctx jsig in write_const ctx ch (ConstUtf8 (esig)) | ValAnnotation ann -> write_byte ch (Char.code '@'); write_annotation ctx ch ann | ValArray(lvals) -> write_byte ch (Char.code '['); write_ui16 ch (List.length lvals); List.iter (write_element_value ctx ch) lvals ;; haxe_4.2.4.orig/libs/json/dune0000644000175000017500000000011414146064214016155 0ustar andyandy00000000000000(include_subdirs no) (library (name json) (preprocess (pps sedlex.ppx)) )haxe_4.2.4.orig/libs/json/json.ml0000644000175000017500000002536514146064214016621 0ustar andyandy00000000000000(* The Haxe Compiler Copyright (C) 2005-2019 Haxe Foundation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) type t = | JString of string | JFloat of float | JInt of int | JObject of (string * t) list | JArray of t list | JBool of bool | JNull let write_iter f_el f_sep l = let rec rest = function | [] -> () | v :: l -> f_sep(); f_el v; rest l in match l with | [] -> () | v :: l -> f_el v; rest l let write_sep w = w "," let rec write_json w v = match v with | JNull -> write_null w | JBool b -> write_bool w b | JString s -> write_string w s | JFloat f -> write_float w f | JInt i -> write_int w i | JObject o -> write_object w o | JArray a -> write_array w a and write_null w = w "null" and write_bool w b = w (if b then "true" else "false") and write_string w s = w "\""; let b = Buffer.create (String.length s) in for i = 0 to String.length s - 1 do match String.unsafe_get s i with | '"' -> Buffer.add_string b "\\\"" | '\t' -> Buffer.add_string b "\\t" | '\r' -> Buffer.add_string b "\\r" | '\b' -> Buffer.add_string b "\\b" | '\n' -> Buffer.add_string b "\\n" | '\012' -> Buffer.add_string b "\\f" | '\\' -> Buffer.add_string b "\\\\" | '\x00'..'\x1F' | '\x7F' as c -> Buffer.add_string b (Printf.sprintf "\\u%04X" (int_of_char c)) | c -> Buffer.add_char b c done; w (Buffer.contents b); w "\"" and write_int w i = w (string_of_int i) and write_float w f = match classify_float f with | FP_nan | FP_infinite -> failwith "NaN and infinity floats are unsupported in JSON" | _ -> let s = Printf.sprintf "%.16g" f in let s = if float_of_string s = f then s else Printf.sprintf "%.17g" f in w s and write_array w a = w "["; write_iter (write_json w) (fun() -> write_sep w) a; w "]" and write_object w o = let write_el (k, v) = write_string w k; w ":"; write_json w v in w "{"; write_iter write_el (fun() -> write_sep w) o; w "}" let string_of_json json = let b = Buffer.create 0 in write_json (Buffer.add_string b) json; Buffer.contents b; module Reader = struct (* The following code is basically stripped down yojson (https://github.com/mjambon/yojson), adapted to our data structures and using sedlex instad of ocamllex. TODO: we could probably re-use utf-8 stuff from our extlib, but I don't know enough about it. *) open Sedlexing open Sedlexing.Utf8 exception Json_error of string exception Int_overflow let dec c = Char.code c - 48 let hex c = match (char_of_int c) with | '0'..'9' -> c - int_of_char '0' | 'a'..'f' -> c - int_of_char 'a' + 10 | 'A'..'F' -> c - int_of_char 'A' + 10 | _ -> assert false let min10 = min_int / 10 - (if min_int mod 10 = 0 then 0 else 1) let max10 = max_int / 10 + (if max_int mod 10 = 0 then 0 else 1) let json_error s = raise (Json_error s) let extract_positive_int lexbuf = let s = Sedlexing.Utf8.lexeme lexbuf in let n = ref 0 in for i = 0 to (lexeme_length lexbuf) - 1 do if !n >= max10 then raise Int_overflow else n := 10 * !n + dec s.[i] done; if !n < 0 then raise Int_overflow else !n let make_positive_int lexbuf = try JInt (extract_positive_int lexbuf) with Int_overflow -> JFloat (float_of_string (lexeme lexbuf)) let extract_negative_int lexbuf = let s = Sedlexing.Utf8.lexeme lexbuf in let n = ref 0 in for i = 1 to (lexeme_length lexbuf) - 1 do if !n <= min10 then raise Int_overflow else n := 10 * !n - dec s.[i] done; if !n > 0 then raise Int_overflow else !n let make_negative_int lexbuf = try JInt (extract_negative_int lexbuf) with Int_overflow -> JFloat (float_of_string (lexeme lexbuf)) let utf8_of_code buf x = let add = Buffer.add_char in (* Straight <= doesn't work with signed 31-bit ints *) let maxbits n x = x lsr n = 0 in if maxbits 7 x then (* 7 *) add buf (Char.chr x) else if maxbits 11 x then ( (* 5 + 6 *) add buf (Char.chr (0b11000000 lor ((x lsr 6) land 0b00011111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))) ) else if maxbits 16 x then ( (* 4 + 6 + 6 *) add buf (Char.chr (0b11100000 lor ((x lsr 12) land 0b00001111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))) ) else if maxbits 21 x then ( (* 3 + 6 + 6 + 6 *) add buf (Char.chr (0b11110000 lor ((x lsr 18) land 0b00000111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) else if maxbits 26 x then ( (* 2 + 6 + 6 + 6 + 6 *) add buf (Char.chr (0b11111000 lor ((x lsr 24) land 0b00000011))); add buf (Char.chr (0b10000000 lor ((x lsr 18) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) else ( assert (maxbits 31 x); (* 1 + 6 + 6 + 6 + 6 + 6 *) add buf (Char.chr (0b11111100 lor ((x lsr 30) land 0b00000001))); add buf (Char.chr (0b10000000 lor ((x lsr 24) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 18) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 12) land 0b00111111))); add buf (Char.chr (0b10000000 lor ((x lsr 6) land 0b00111111))); add buf (Char.chr (0b10000000 lor (x land 0b00111111))); ) let code_of_surrogate_pair i j = let high10 = i - 0xD800 in let low10 = j - 0xDC00 in 0x10000 + ((high10 lsl 10) lor low10) let utf8_of_surrogate_pair buf i j = utf8_of_code buf (code_of_surrogate_pair i j) let space = [%sedlex.regexp? Plus (Chars " \t\r\n")] let digit = [%sedlex.regexp? '0' .. '9'] let nonzero = [%sedlex.regexp? '1' .. '9'] let digits = [%sedlex.regexp? Plus digit] let frac = [%sedlex.regexp? '.', digits] let e = [%sedlex.regexp? (Chars "eE"),(Opt (Chars "+-"))] let exp = [%sedlex.regexp? e, digits] let positive_int = [%sedlex.regexp? digit | (nonzero, digits)] let float = [%sedlex.regexp? (Opt '-'), positive_int, (frac | exp | (frac, exp))] let hex = [%sedlex.regexp? '0'..'9' | 'a'..'f' | 'A'..'F' ] let rec read_json lexbuf = match%sedlex lexbuf with | "true" -> JBool true | "false" -> JBool false | "null" -> JNull | '"' -> JString (finish_string (Buffer.create 0) lexbuf) | positive_int -> make_positive_int lexbuf | '-', positive_int -> make_negative_int lexbuf | float -> JFloat (float_of_string (lexeme lexbuf)) | '{' -> let acc = ref [] in begin try skip_space lexbuf; read_object_end lexbuf; let field_name = read_string lexbuf in skip_space lexbuf; read_colon lexbuf; skip_space lexbuf; acc := (field_name, read_json lexbuf) :: !acc; while true do skip_space lexbuf; read_object_sep lexbuf; skip_space lexbuf; let field_name = read_string lexbuf in skip_space lexbuf; read_colon lexbuf; skip_space lexbuf; acc := (field_name, read_json lexbuf) :: !acc; done; assert false with Exit -> JObject (List.rev !acc) end | '[' -> let acc = ref [] in begin try skip_space lexbuf; read_array_end lexbuf; acc := read_json lexbuf :: !acc; while true do skip_space lexbuf; read_array_sep lexbuf; skip_space lexbuf; acc := read_json lexbuf :: !acc; done; assert false with Exit -> JArray (List.rev !acc) end | space -> read_json lexbuf | eof -> json_error "Unexpected end of input" | _ -> json_error "Invalid token" and finish_string buf lexbuf = match%sedlex lexbuf with | '"' -> Buffer.contents buf | '\\' -> finish_escaped_char buf lexbuf; finish_string buf lexbuf | Plus (Compl ('"' | '\\')) -> Buffer.add_string buf (Sedlexing.Utf8.lexeme lexbuf); finish_string buf lexbuf | eof -> json_error "Unexpected end of input" | _ -> assert false and finish_escaped_char buf lexbuf = match%sedlex lexbuf with | '"' | '\\' | '/' -> Buffer.add_char buf (Uchar.to_char (Sedlexing.lexeme_char lexbuf 0)) | 'b' -> Buffer.add_char buf '\b' | 'f' -> Buffer.add_char buf '\012' | 'n' -> Buffer.add_char buf '\n' | 'r' -> Buffer.add_char buf '\r' | 't' -> Buffer.add_char buf '\t' | 'u', hex, hex, hex, hex -> let a,b,c,d = match Sedlexing.lexeme lexbuf with | [|_; a; b; c; d|] -> Uchar.to_int a, Uchar.to_int b, Uchar.to_int c, Uchar.to_int d | _ -> assert false in let x = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if x >= 0xD800 && x <= 0xDBFF then finish_surrogate_pair buf x lexbuf else utf8_of_code buf x | _ -> json_error "Invalid escape sequence" and finish_surrogate_pair buf x lexbuf = match%sedlex lexbuf with | "\\u", hex, hex, hex, hex -> let a,b,c,d = match Sedlexing.lexeme lexbuf with | [|_;_ ; a; b; c; d|] -> Uchar.to_int a, Uchar.to_int b, Uchar.to_int c, Uchar.to_int d | _ -> assert false in let y = (hex a lsl 12) lor (hex b lsl 8) lor (hex c lsl 4) lor hex d in if y >= 0xDC00 && y <= 0xDFFF then utf8_of_surrogate_pair buf x y else json_error "Invalid low surrogate for code point beyond U+FFFF" | _ -> json_error "Missing escape sequence representing low surrogate for code point beyond U+FFFF" and skip_space lexbuf = match%sedlex lexbuf with | space | "" -> () | _ -> assert false and read_string lexbuf = match%sedlex lexbuf with | '"' -> finish_string (Buffer.create 0) lexbuf | _ -> json_error "Expected string" and read_array_end lexbuf = match%sedlex lexbuf with | ']' -> raise Exit | "" -> () | _ -> assert false and read_array_sep lexbuf = match%sedlex lexbuf with | ',' -> () | ']' -> raise Exit | _ -> json_error "Expected ',' or ']'" and read_object_end lexbuf = match%sedlex lexbuf with | '}' -> raise Exit | "" -> () | _ -> assert false and read_object_sep lexbuf = match%sedlex lexbuf with | ',' -> () | '}' -> raise Exit | _ -> json_error "Expected ',' or '}'" and read_colon lexbuf = match%sedlex lexbuf with | ':' -> () | _ -> json_error "Expected ':'" end haxe_4.2.4.orig/libs/mbedtls/dune0000644000175000017500000000013614146064214016642 0ustar andyandy00000000000000(include_subdirs no) (library (name mbedtls) (c_names mbedtls_stubs ) (wrapped false) )haxe_4.2.4.orig/libs/mbedtls/mbedtls.ml0000644000175000017500000001050114146064214017745 0ustar andyandy00000000000000type mbedtls_ctr_drbg_context type mbedtls_entropy_context type mbedtls_ssl_config type mbedtls_ssl_context type mbedtls_x509_crt type mbedtls_pk_context type mbedtls_result = int type t_mbedtls_entropy_func = mbedtls_entropy_context -> bytes -> int -> mbedtls_result external mbedtls_strerror : int -> string = "ml_mbedtls_strerror" external mbedtls_ctr_drbg_init : unit -> mbedtls_ctr_drbg_context = "ml_mbedtls_ctr_drbg_init" external mbedtls_ctr_drbg_random : mbedtls_ctr_drbg_context -> bytes -> int -> mbedtls_result = "ml_mbedtls_ctr_drbg_random" external mbedtls_ctr_drbg_seed : mbedtls_ctr_drbg_context -> 'a -> string option -> mbedtls_result = "ml_mbedtls_ctr_drbg_seed" external mbedtls_entropy_func : mbedtls_entropy_context -> bytes -> int -> mbedtls_result = "ml_mbedtls_entropy_func" external mbedtls_entropy_init : unit -> mbedtls_entropy_context = "ml_mbedtls_entropy_init" external mbedtls_ssl_conf_ca_chain : mbedtls_ssl_config -> mbedtls_x509_crt -> unit = "ml_mbedtls_ssl_conf_ca_chain" external mbedtls_ssl_config_authmode : mbedtls_ssl_config -> int -> unit = "ml_mbedtls_ssl_conf_authmode" external mbedtls_ssl_config_defaults : mbedtls_ssl_config -> int -> int -> int -> mbedtls_result = "ml_mbedtls_ssl_config_defaults" external mbedtls_ssl_config_init : unit -> mbedtls_ssl_config = "ml_mbedtls_ssl_config_init" external mbedtls_ssl_config_rng : mbedtls_ssl_config -> 'a -> unit = "ml_mbedtls_ssl_conf_rng" external mbedtls_ssl_init : unit -> mbedtls_ssl_context = "ml_mbedtls_ssl_init" external mbedtls_ssl_get_peer_cert : mbedtls_ssl_context -> mbedtls_x509_crt option = "ml_mbedtls_ssl_get_peer_cert" external mbedtls_ssl_handshake : mbedtls_ssl_context -> mbedtls_result = "ml_mbedtls_ssl_handshake" external mbedtls_ssl_read : mbedtls_ssl_context -> bytes -> int -> int -> mbedtls_result = "ml_mbedtls_ssl_read" external mbedtls_ssl_set_bio : mbedtls_ssl_context -> 'a -> ('a -> bytes -> mbedtls_result) -> ('a -> bytes -> mbedtls_result) -> unit = "ml_mbedtls_ssl_set_bio" external mbedtls_ssl_set_hostname : mbedtls_ssl_context -> string -> mbedtls_result = "ml_mbedtls_ssl_set_hostname" external mbedtls_ssl_setup : mbedtls_ssl_context -> mbedtls_ssl_config -> mbedtls_result = "ml_mbedtls_ssl_setup" external mbedtls_ssl_write : mbedtls_ssl_context -> bytes -> int -> int -> mbedtls_result = "ml_mbedtls_ssl_write" external mbedtls_pk_init : unit -> mbedtls_pk_context = "ml_mbedtls_pk_init" external mbedtls_pk_parse_key : mbedtls_pk_context -> bytes -> string option -> mbedtls_result = "ml_mbedtls_pk_parse_key" external mbedtls_pk_parse_keyfile : mbedtls_pk_context -> string -> string option -> mbedtls_result = "ml_mbedtls_pk_parse_keyfile" external mbedtls_pk_parse_public_keyfile : mbedtls_pk_context -> string -> mbedtls_result = "ml_mbedtls_pk_parse_public_keyfile" external mbedtls_pk_parse_public_key : mbedtls_pk_context -> bytes -> mbedtls_result = "ml_mbedtls_pk_parse_public_key" external mbedtls_x509_crt_init : unit -> mbedtls_x509_crt = "ml_mbedtls_x509_crt_init" external mbedtls_x509_next : mbedtls_x509_crt -> mbedtls_x509_crt option = "ml_mbedtls_x509_next" external mbedtls_x509_crt_parse : mbedtls_x509_crt -> bytes -> mbedtls_result = "ml_mbedtls_x509_crt_parse" external mbedtls_x509_crt_parse_file : mbedtls_x509_crt -> string -> mbedtls_result = "ml_mbedtls_x509_crt_parse_file" external mbedtls_x509_crt_parse_path : mbedtls_x509_crt -> string -> mbedtls_result = "ml_mbedtls_x509_crt_parse_path" external hx_cert_get_alt_names : mbedtls_x509_crt -> string array = "hx_cert_get_alt_names" external hx_cert_get_issuer : mbedtls_x509_crt -> string -> string option = "hx_cert_get_issuer" external hx_cert_get_notafter : mbedtls_x509_crt -> float = "hx_cert_get_notafter" external hx_cert_get_notbefore : mbedtls_x509_crt -> float = "hx_cert_get_notbefore" external hx_cert_get_subject : mbedtls_x509_crt -> string -> string option = "hx_cert_get_subject" (* glue *) external hx_cert_load_defaults : mbedtls_x509_crt -> int = "hx_cert_load_defaults" external hx_get_ssl_authmode_flags : unit -> (string * int) array = "hx_get_ssl_authmode_flags" external hx_get_ssl_endpoint_flags : unit -> (string * int) array = "hx_get_ssl_endpoint_flags" external hx_get_ssl_preset_flags : unit -> (string * int) array = "hx_get_ssl_preset_flags" external hx_get_ssl_transport_flags : unit -> (string * int) array = "hx_get_ssl_transport_flags" haxe_4.2.4.orig/libs/mbedtls/mbedtls_stubs.c0000644000175000017500000004332514146064214021011 0ustar andyandy00000000000000#include #include #include #ifdef _WIN32 #include #include #endif #ifdef __APPLE__ #include #endif #include #include #include #include #include #include #include "mbedtls/debug.h" #include "mbedtls/error.h" #include "mbedtls/config.h" #include "mbedtls/ssl.h" #include "mbedtls/entropy.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/certs.h" #include "mbedtls/oid.h" #define PVoid_val(v) (*((void**) Data_custom_val(v))) void debug(void* ctx, int debug_level, const char* file_name, int line, const char* message) { printf("%s:%i: %s", file_name, line, message); } #define Val_none Val_int(0) static value Val_some(value v) { CAMLparam1(v); CAMLlocal1(some); some = caml_alloc(1, 0); Store_field(some, 0, v); CAMLreturn(some); } CAMLprim value ml_mbedtls_strerror(value code) { CAMLparam1(code); CAMLlocal1(r); char buf[128]; mbedtls_strerror(Int_val(code), buf, sizeof(buf)); r = caml_copy_string(buf); CAMLreturn(r); } // CtrDrbg #define CtrDrbg_val(v) (*((mbedtls_ctr_drbg_context**) Data_custom_val(v))) static void ml_mbedtls_ctr_drbg_finalize(value v) { mbedtls_ctr_drbg_context* ctr_drbg = CtrDrbg_val(v); if (ctr_drbg != NULL) { mbedtls_ctr_drbg_free(ctr_drbg); } } static struct custom_operations ctr_drbg_ops = { .identifier = "ml_ctr_drbg", .finalize = ml_mbedtls_ctr_drbg_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_ctr_drbg_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&ctr_drbg_ops, sizeof(mbedtls_ctr_drbg_context*), 0, 1); mbedtls_ctr_drbg_context* ctr_drbg = malloc(sizeof(mbedtls_ctr_drbg_context)); mbedtls_ctr_drbg_init(ctr_drbg); CtrDrbg_val(obj) = ctr_drbg; CAMLreturn(obj); } CAMLprim value ml_mbedtls_ctr_drbg_random(value p_rng, value output, value output_len) { CAMLparam3(p_rng, output, output_len); CAMLreturn(Val_int(mbedtls_ctr_drbg_random(CtrDrbg_val(p_rng), String_val(output), Int_val(output_len)))); } CAMLprim value ml_mbedtls_ctr_drbg_seed(value ctx, value p_entropy, value custom) { CAMLparam2(ctx, custom); CAMLreturn(Val_int(mbedtls_ctr_drbg_seed(CtrDrbg_val(ctx), mbedtls_entropy_func, PVoid_val(p_entropy), NULL, 0))); } // Entropy #define Entropy_val(v) (*((mbedtls_entropy_context**) Data_custom_val(v))) static void ml_mbedtls_entropy_finalize(value v) { mbedtls_entropy_context* entropy = Entropy_val(v); if (entropy != NULL) { mbedtls_entropy_free(entropy); } } static struct custom_operations entropy_ops = { .identifier = "ml_entropy", .finalize = ml_mbedtls_entropy_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_entropy_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&entropy_ops, sizeof(mbedtls_entropy_context*), 0, 1); mbedtls_entropy_context* entropy = malloc(sizeof(mbedtls_entropy_context)); mbedtls_entropy_init(entropy); Entropy_val(obj) = entropy; CAMLreturn(obj); } CAMLprim value ml_mbedtls_entropy_func(value data, value output, value len) { CAMLparam3(data, output, len); CAMLreturn(Val_int(mbedtls_entropy_func(PVoid_val(data), String_val(output), Int_val(len)))); } // Certificate #define X509Crt_val(v) (*((mbedtls_x509_crt**) Data_custom_val(v))) static void ml_mbedtls_x509_crt_finalize(value v) { mbedtls_x509_crt* x509_crt = X509Crt_val(v); if (x509_crt != NULL) { mbedtls_x509_crt_free(x509_crt); } } static struct custom_operations x509_crt_ops = { .identifier = "ml_x509_crt", .finalize = ml_mbedtls_x509_crt_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_x509_crt_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&x509_crt_ops, sizeof(mbedtls_x509_crt*), 0, 1); mbedtls_x509_crt* x509_crt = malloc(sizeof(mbedtls_x509_crt)); mbedtls_x509_crt_init(x509_crt); X509Crt_val(obj) = x509_crt; CAMLreturn(obj); } CAMLprim value ml_mbedtls_x509_next(value chain) { CAMLparam1(chain); CAMLlocal2(r, obj); mbedtls_x509_crt* cert = X509Crt_val(chain); if (cert->next == NULL) { CAMLreturn(Val_none); } obj = caml_alloc_custom(&x509_crt_ops, sizeof(mbedtls_x509_crt*), 0, 1); X509Crt_val(obj) = cert->next; CAMLreturn(Val_some(obj)); } CAMLprim value ml_mbedtls_x509_crt_parse(value chain, value bytes) { CAMLparam2(chain, bytes); const char* buf = String_val(bytes); int len = caml_string_length(bytes); CAMLreturn(Val_int(mbedtls_x509_crt_parse(X509Crt_val(chain), buf, len + 1))); } CAMLprim value ml_mbedtls_x509_crt_parse_file(value chain, value path) { CAMLparam2(chain, path); CAMLreturn(Val_int(mbedtls_x509_crt_parse_file(X509Crt_val(chain), String_val(path)))); } CAMLprim value ml_mbedtls_x509_crt_parse_path(value chain, value path) { CAMLparam2(chain, path); CAMLreturn(Val_int(mbedtls_x509_crt_parse_path(X509Crt_val(chain), String_val(path)))); } // Certificate Haxe API value caml_string_of_asn1_buf(mbedtls_asn1_buf* dat) { CAMLparam0(); CAMLlocal1(s); s = caml_alloc_string(dat->len); memcpy(String_val(s), dat->p, dat->len); CAMLreturn(s); } CAMLprim value hx_cert_get_alt_names(value chain) { CAMLparam1(chain); CAMLlocal1(obj); mbedtls_x509_crt* cert = X509Crt_val(chain); if (cert->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME == 0 || &cert->subject_alt_names == NULL) { obj = Atom(0); } else { mbedtls_asn1_sequence* cur = &cert->subject_alt_names; int i = 0; while (cur != NULL) { ++i; cur = cur->next; } obj = caml_alloc(i, 0); cur = &cert->subject_alt_names; i = 0; while (cur != NULL) { Store_field(obj, i, caml_string_of_asn1_buf(&cur->buf)); ++i; cur = cur->next; } } CAMLreturn(obj); } CAMLprim value hx_cert_get_subject(value chain, value objname) { CAMLparam2(chain, objname); mbedtls_x509_name *obj; mbedtls_x509_crt* cert = X509Crt_val(chain); const char *oname, *rname; obj = &cert->subject; rname = String_val(objname); while (obj != NULL) { int r = mbedtls_oid_get_attr_short_name(&obj->oid, &oname); if (r == 0 && strcmp(oname, rname) == 0) { CAMLreturn(Val_some(caml_string_of_asn1_buf(&obj->val))); } obj = obj->next; } CAMLreturn(Val_none); } CAMLprim value hx_cert_get_issuer(value chain, value objname) { CAMLparam2(chain, objname); mbedtls_x509_name *obj; mbedtls_x509_crt* cert = X509Crt_val(chain); int r; const char *oname, *rname; obj = &cert->issuer; rname = String_val(objname); while (obj != NULL) { r = mbedtls_oid_get_attr_short_name(&obj->oid, &oname); if (r == 0 && strcmp(oname, rname) == 0) { CAMLreturn(Val_some(caml_string_of_asn1_buf(&obj->val))); } obj = obj->next; } CAMLreturn(Val_none); } time_t time_to_time_t(mbedtls_x509_time* t) { struct tm info; info.tm_year = t->year - 1900; info.tm_mon = t->mon - 1; info.tm_mday = t->day; info.tm_hour = t->hour; info.tm_min = t->min; info.tm_sec = t->sec; return mktime(&info); } CAMLprim value hx_cert_get_notafter(value chain) { CAMLparam1(chain); mbedtls_x509_crt* cert = X509Crt_val(chain); mbedtls_x509_time *t = &cert->valid_to; time_t time = time_to_time_t(t); CAMLreturn(caml_copy_double((double)time)); } CAMLprim value hx_cert_get_notbefore(value chain) { CAMLparam1(chain); mbedtls_x509_crt* cert = X509Crt_val(chain); mbedtls_x509_time *t = &cert->valid_from; time_t time = time_to_time_t(t); CAMLreturn(caml_copy_double((double)time)); } // Config #define Config_val(v) (*((mbedtls_ssl_config**) Data_custom_val(v))) static void ml_mbedtls_ssl_config_finalize(value v) { mbedtls_ssl_config* ssl_config = Config_val(v); if (ssl_config != NULL) { mbedtls_ssl_config_free(ssl_config); } } static struct custom_operations ssl_config_ops = { .identifier = "ml_ssl_config", .finalize = ml_mbedtls_ssl_config_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_ssl_config_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&ssl_config_ops, sizeof(mbedtls_ssl_config*), 0, 1); mbedtls_ssl_config* ssl_config = malloc(sizeof(mbedtls_ssl_config)); mbedtls_ssl_config_init(ssl_config); Config_val(obj) = ssl_config; CAMLreturn(obj); } CAMLprim value ml_mbedtls_ssl_conf_authmode(value conf, value authmode) { CAMLparam2(conf, authmode); mbedtls_ssl_conf_authmode(Config_val(conf), Int_val(authmode)); CAMLreturn(Val_unit); } CAMLprim value ml_mbedtls_ssl_conf_ca_chain(value conf, value ca_chain) { CAMLparam2(conf, ca_chain); mbedtls_ssl_conf_ca_chain(Config_val(conf), X509Crt_val(ca_chain), NULL); CAMLreturn(Val_unit); } CAMLprim value ml_mbedtls_ssl_config_defaults(value conf, value endpoint, value transport, value preset) { CAMLparam4(conf, endpoint, transport, preset); CAMLreturn(Val_int(mbedtls_ssl_config_defaults(Config_val(conf), Int_val(endpoint), Int_val(transport), Int_val(preset)))); } CAMLprim value ml_mbedtls_ssl_conf_rng(value conf, value p_rng) { CAMLparam2(conf, p_rng); mbedtls_ssl_conf_rng(Config_val(conf), mbedtls_ctr_drbg_random, PVoid_val(p_rng)); CAMLreturn(Val_unit); } // Pk #define PkContext_val(v) (*((mbedtls_pk_context**) Data_custom_val(v))) static void ml_mbedtls_pk_context_finalize(value v) { mbedtls_pk_context* pk_context = PkContext_val(v); if (pk_context != NULL) { mbedtls_pk_free(pk_context); } } static struct custom_operations pk_context_ops = { .identifier = "ml_pk_context", .finalize = ml_mbedtls_pk_context_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_pk_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&pk_context_ops, sizeof(mbedtls_pk_context*), 0, 1); mbedtls_pk_context* pk_context = malloc(sizeof(mbedtls_pk_context)); mbedtls_pk_init(pk_context); PkContext_val(obj) = pk_context; CAMLreturn(obj); } CAMLprim value ml_mbedtls_pk_parse_key(value ctx, value key, value password) { CAMLparam3(ctx, key, password); const char* pwd = NULL; size_t pwdlen = 0; if (password != Val_none) { pwd = String_val(Field(password, 0)); pwdlen = caml_string_length(Field(password, 0)); } CAMLreturn(mbedtls_pk_parse_key(PkContext_val(ctx), String_val(key), caml_string_length(key) + 1, pwd, pwdlen)); } CAMLprim value ml_mbedtls_pk_parse_keyfile(value ctx, value path, value password) { CAMLparam3(ctx, path, password); const char* pwd = NULL; if (password != Val_none) { pwd = String_val(Field(password, 0)); } CAMLreturn(mbedtls_pk_parse_keyfile(PkContext_val(ctx), String_val(path), pwd)); } CAMLprim value ml_mbedtls_pk_parse_public_key(value ctx, value key) { CAMLparam2(ctx, key); CAMLreturn(mbedtls_pk_parse_public_key(PkContext_val(ctx), String_val(key), caml_string_length(key) + 1)); } CAMLprim value ml_mbedtls_pk_parse_public_keyfile(value ctx, value path) { CAMLparam2(ctx, path); CAMLreturn(mbedtls_pk_parse_public_keyfile(PkContext_val(ctx), String_val(path))); } // Ssl #define SslContext_val(v) (*((mbedtls_ssl_context**) Data_custom_val(v))) static void ml_mbedtls_ssl_context_finalize(value v) { mbedtls_ssl_context* ssl_context = SslContext_val(v); if (ssl_context != NULL) { mbedtls_ssl_free(ssl_context); } } static struct custom_operations ssl_context_ops = { .identifier = "ml_ssl_context", .finalize = ml_mbedtls_ssl_context_finalize, .compare = custom_compare_default, .hash = custom_hash_default, .serialize = custom_serialize_default, .deserialize = custom_deserialize_default, }; CAMLprim value ml_mbedtls_ssl_init(void) { CAMLparam0(); CAMLlocal1(obj); obj = caml_alloc_custom(&ssl_context_ops, sizeof(mbedtls_ssl_context*), 0, 1); mbedtls_ssl_context* ssl_context = malloc(sizeof(mbedtls_ssl_context)); mbedtls_ssl_init(ssl_context); SslContext_val(obj) = ssl_context; CAMLreturn(obj); } CAMLprim value ml_mbedtls_ssl_get_peer_cert(value ssl) { CAMLparam1(ssl); CAMLlocal1(obj); mbedtls_ssl_context* ssl_context = SslContext_val(ssl); mbedtls_x509_crt* crt = (mbedtls_x509_crt*)mbedtls_ssl_get_peer_cert(ssl_context); if (crt == NULL) { CAMLreturn(Val_none); } obj = caml_alloc_custom(&x509_crt_ops, sizeof(mbedtls_x509_crt*), 0, 1); X509Crt_val(obj) = crt; CAMLreturn(Val_some(obj)); } CAMLprim value ml_mbedtls_ssl_handshake(value ssl) { CAMLparam1(ssl); CAMLreturn(Val_int(mbedtls_ssl_handshake(SslContext_val(ssl)))); } CAMLprim value ml_mbedtls_ssl_read(value ssl, value buf, value pos, value len) { CAMLparam4(ssl, buf, pos, len); CAMLreturn(Val_int(mbedtls_ssl_read(SslContext_val(ssl), String_val(buf) + Int_val(pos), Int_val(len)))); } static int bio_write_cb(void* ctx, const unsigned char* buf, size_t len) { CAMLparam0(); CAMLlocal3(r, s, vctx); vctx = (value)ctx; s = caml_alloc_string(len); memcpy(String_val(s), buf, len); r = caml_callback2(Field(vctx, 1), Field(vctx, 0), s); CAMLreturn(Int_val(r)); } static int bio_read_cb(void* ctx, unsigned char* buf, size_t len) { CAMLparam0(); CAMLlocal3(r, s, vctx); vctx = (value)ctx; s = caml_alloc_string(len); r = caml_callback2(Field(vctx, 2), Field(vctx, 0), s); memcpy(buf, String_val(s), len); CAMLreturn(Int_val(r)); } CAMLprim value ml_mbedtls_ssl_set_bio(value ssl, value p_bio, value f_send, value f_recv) { CAMLparam4(ssl, p_bio, f_send, f_recv); CAMLlocal1(ctx); ctx = caml_alloc(3, 0); Store_field(ctx, 0, p_bio); Store_field(ctx, 1, f_send); Store_field(ctx, 2, f_recv); mbedtls_ssl_set_bio(SslContext_val(ssl), (void*)ctx, bio_write_cb, bio_read_cb, NULL); CAMLreturn(Val_unit); } CAMLprim value ml_mbedtls_ssl_set_hostname(value ssl, value hostname) { CAMLparam2(ssl, hostname); CAMLreturn(Val_int(mbedtls_ssl_set_hostname(SslContext_val(ssl), String_val(hostname)))); } CAMLprim value ml_mbedtls_ssl_setup(value ssl, value conf) { CAMLparam2(ssl, conf); CAMLreturn(Val_int(mbedtls_ssl_setup(SslContext_val(ssl), Config_val(conf)))); } CAMLprim value ml_mbedtls_ssl_write(value ssl, value buf, value pos, value len) { CAMLparam4(ssl, buf, pos, len); CAMLreturn(Val_int(mbedtls_ssl_write(SslContext_val(ssl), String_val(buf) + Int_val(pos), Int_val(len)))); } // glue CAMLprim value hx_cert_load_defaults(value certificate) { CAMLparam1(certificate); int r = 1; mbedtls_x509_crt *chain = X509Crt_val(certificate); #ifdef _WIN32 HCERTSTORE store; PCCERT_CONTEXT cert; if (store = CertOpenSystemStore(0, "Root")) { cert = NULL; while (cert = CertEnumCertificatesInStore(store, cert)) { r = mbedtls_x509_crt_parse_der(chain, (unsigned char *)cert->pbCertEncoded, cert->cbCertEncoded); if (r != 0) { CAMLreturn(Val_int(r)); } } CertCloseStore(store, 0); } #endif #ifdef __APPLE__ CFMutableDictionaryRef search; CFArrayRef result; SecKeychainRef keychain; SecCertificateRef item; CFDataRef dat; // Load keychain if (SecKeychainOpen("/System/Library/Keychains/SystemRootCertificates.keychain", &keychain) == errSecSuccess) { // Search for certificates search = CFDictionaryCreateMutable(NULL, 0, NULL, NULL); CFDictionarySetValue(search, kSecClass, kSecClassCertificate); CFDictionarySetValue(search, kSecMatchLimit, kSecMatchLimitAll); CFDictionarySetValue(search, kSecReturnRef, kCFBooleanTrue); CFDictionarySetValue(search, kSecMatchSearchList, CFArrayCreate(NULL, (const void **)&keychain, 1, NULL)); if (SecItemCopyMatching(search, (CFTypeRef *)&result) == errSecSuccess) { CFIndex n = CFArrayGetCount(result); for (CFIndex i = 0; i < n; i++) { item = (SecCertificateRef)CFArrayGetValueAtIndex(result, i); // Get certificate in DER format dat = SecCertificateCopyData(item); if (dat) { r = mbedtls_x509_crt_parse_der(chain, (unsigned char *)CFDataGetBytePtr(dat), CFDataGetLength(dat)); CFRelease(dat); if (r != 0) { CAMLreturn(Val_int(r)); } } } } CFRelease(keychain); } #endif CAMLreturn(Val_int(r)); } static value build_fields(int num_fields, const char* names[], int values[]) { CAMLparam0(); CAMLlocal2(ret, tuple); ret = caml_alloc(num_fields, 0); for (int i = 0; i < num_fields; ++i) { tuple = caml_alloc_tuple(2); Store_field(tuple, 0, caml_copy_string(names[i])); Store_field(tuple, 1, Val_int(values[i])); Store_field(ret, i, tuple); } CAMLreturn(ret); } CAMLprim value hx_get_ssl_authmode_flags(value unit) { CAMLparam1(unit); const char* names[] = {"SSL_VERIFY_NONE", "SSL_VERIFY_OPTIONAL", "SSL_VERIFY_REQUIRED"}; int values[] = {MBEDTLS_SSL_VERIFY_NONE, MBEDTLS_SSL_VERIFY_OPTIONAL, MBEDTLS_SSL_VERIFY_REQUIRED}; CAMLreturn(build_fields(sizeof(values) / sizeof(values[0]), names, values)); } CAMLprim value hx_get_ssl_endpoint_flags(value unit) { CAMLparam1(unit); const char* names[] = {"SSL_IS_CLIENT", "SSL_IS_SERVER"}; int values[] = {MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_IS_SERVER}; CAMLreturn(build_fields(sizeof(values) / sizeof(values[0]), names, values)); } CAMLprim value hx_get_ssl_preset_flags(value unit) { CAMLparam1(unit); const char* names[] = {"SSL_PRESET_DEFAULT", "SSL_PRESET_SUITEB"}; int values[] = {MBEDTLS_SSL_PRESET_DEFAULT, MBEDTLS_SSL_PRESET_SUITEB}; CAMLreturn(build_fields(sizeof(values) / sizeof(values[0]), names, values)); } CAMLprim value hx_get_ssl_transport_flags(value unit) { CAMLparam1(unit); const char* names[] = {"SSL_TRANSPORT_STREAM", "SSL_TRANSPORT_DATAGRAM"}; int values[] = {MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_TRANSPORT_DATAGRAM}; CAMLreturn(build_fields(sizeof(values) / sizeof(values[0]), names, values)); }haxe_4.2.4.orig/libs/neko/Makefile0000644000175000017500000000102114146064214016720 0ustar andyandy00000000000000OCAMLOPT=ocamlopt OCAMLC=ocamlc SRC=nast.ml nxml.ml binast.ml nbytecode.ml ncompile.ml all: bytecode native native: neko.cmxa bytecode: neko.cma neko.cmxa: $(SRC) ocamlfind $(OCAMLOPT) -package extlib -safe-string -a -o neko.cmxa $(SRC) neko.cma: $(SRC) ocamlfind $(OCAMLC) -package extlib -safe-string -a -o neko.cma $(SRC) clean: rm -rf neko.cmxa neko.cma neko.lib neko.a $(wildcard *.cmx) $(wildcard *.obj) $(wildcard *.o) $(wildcard *.cmi) $(wildcard *.cmo) .PHONY: all bytecode native clean Makefile: ; $(SRC): ; haxe_4.2.4.orig/libs/neko/binast.ml0000644000175000017500000001243114146064214017101 0ustar andyandy00000000000000(* * Neko Binary AST for OCaml * Copyright (c)2005-2007 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open Nast type context = { ch : unit IO.output; mutable curfile : string; mutable curline : int; mutable scount : int; strings : (string,int) Hashtbl.t; } let b ctx n = IO.write_byte ctx.ch n let write_ui24 ctx n = IO.write_byte ctx.ch n; IO.write_byte ctx.ch (n lsr 8); IO.write_byte ctx.ch (n lsr 16) let write_string ctx s = try let x = ctx.scount - Hashtbl.find ctx.strings s in if x > 0xFF then raise Not_found; b ctx x; with Not_found -> Hashtbl.replace ctx.strings s ctx.scount; ctx.scount <- ctx.scount + 1; b ctx 0; IO.write_ui16 ctx.ch (String.length s); IO.nwrite_string ctx.ch s let write_constant ctx = function | True -> b ctx 0 | False -> b ctx 1 | Null -> b ctx 2 | This -> b ctx 3 | Int n -> if n >= 0 && n <= 0xFF then begin b ctx 4; b ctx n; end else begin b ctx 5; IO.write_i32 ctx.ch n; end | Float s -> b ctx 6; write_string ctx s | String s -> b ctx 7; write_string ctx s | Builtin s -> b ctx 8; write_string ctx s | Ident s -> b ctx 9; write_string ctx s | Int32 n -> b ctx 5; (* same as Int *) IO.write_real_i32 ctx.ch n let write_op ctx op = b ctx (match op with | "+" -> 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 | op -> failwith ("Invalid neko ast op " ^ op)) let rec write_expr_opt ctx = function | None -> b ctx 0; | Some e -> b ctx 1; write_expr ctx e and write_expr ctx (e,p) = if p.psource <> ctx.curfile then begin b ctx 0; write_string ctx p.psource; write_ui24 ctx p.pline; ctx.curfile <- p.psource; ctx.curline <- p.pline; end else if p.pline <> ctx.curline then begin b ctx 1; write_ui24 ctx p.pline; ctx.curline <- p.pline; end; match e with | EConst c -> b ctx 2; write_constant ctx c | EBlock el -> let n = List.length el in if n <= 0xFF then begin b ctx 3; b ctx n; end else begin b ctx 4; write_ui24 ctx n; end; List.iter (write_expr ctx) el | EParenthesis e -> b ctx 5; write_expr ctx e; | EField (e,f) -> b ctx 6; write_expr ctx e; write_string ctx f; | ECall (e,el) -> let n = List.length el in if n <= 0xFF then begin b ctx 7; write_expr ctx e; b ctx n; end else begin b ctx 28; write_expr ctx e; write_ui24 ctx n; end; List.iter (write_expr ctx) el; | EArray (e1,e2) -> b ctx 8; write_expr ctx e1; write_expr ctx e2; | EVars vl -> b ctx 9; b ctx (List.length vl); List.iter (fun (v,e) -> write_string ctx v; write_expr_opt ctx e; ) vl; | EWhile (e1,e2,NormalWhile) -> b ctx 10; write_expr ctx e1; write_expr ctx e2; | EWhile (e1,e2,DoWhile) -> b ctx 11; write_expr ctx e1; write_expr ctx e2; | EIf (e1,e2,eo) -> b ctx 12; write_expr ctx e1; write_expr ctx e2; write_expr_opt ctx eo; | ETry (e1,v,e2) -> b ctx 13; write_expr ctx e1; write_string ctx v; write_expr ctx e2; | EFunction (pl,e) -> b ctx 14; b ctx (List.length pl); List.iter (write_string ctx) pl; write_expr ctx e; | EBinop (op,e1,e2) -> b ctx 15; write_op ctx op; write_expr ctx e1; write_expr ctx e2; | EReturn None -> b ctx 16; | EReturn (Some e) -> b ctx 17; write_expr ctx e; | EBreak None -> b ctx 18; | EBreak (Some e) -> b ctx 19; write_expr ctx e; | EContinue -> b ctx 20; | ENext (e1,e2) -> b ctx 21; write_expr ctx e1; write_expr ctx e2; | EObject fl -> let n = List.length fl in if n <= 0xFF then begin b ctx 22; b ctx n; end else begin b ctx 23; write_ui24 ctx n; end; List.iter (fun (f,e) -> write_string ctx f; write_expr ctx e; ) fl; | ELabel l -> b ctx 24; write_string ctx l; | ESwitch (e,cases,eo) -> let n = List.length cases in if n <= 0xFF then begin b ctx 25; b ctx n; end else begin b ctx 26; write_ui24 ctx n; end; write_expr ctx e; List.iter (fun (e1,e2) -> write_expr ctx e1; write_expr ctx e2; ) cases; write_expr_opt ctx eo; | ENeko s -> b ctx 27; write_ui24 ctx (String.length s); IO.nwrite_string ctx.ch s let write ch e = let ctx = { ch = ch; curfile = ""; curline = -1; scount = 0; strings = Hashtbl.create 0; } in IO.nwrite_string ctx.ch "NBA\001"; write_expr ctx e haxe_4.2.4.orig/libs/neko/dune0000644000175000017500000000012214146064214016137 0ustar andyandy00000000000000(include_subdirs no) (library (name neko) (libraries extlib) (wrapped false) )haxe_4.2.4.orig/libs/neko/nast.ml0000644000175000017500000001107214146064214016566 0ustar andyandy00000000000000(* * Neko AST for OCaml * Copyright (c)2005 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) type pos = { psource : string; pline : int; } type constant = | True | False | Null | This | Int of int | Float of string | String of string | Builtin of string | Ident of string | Int32 of int32 type while_flag = | NormalWhile | DoWhile type expr_decl = | EConst of constant | EBlock of expr list | EParenthesis of expr | EField of expr * string | ECall of expr * expr list | EArray of expr * expr | EVars of (string * expr option) list | EWhile of expr * expr * while_flag | EIf of expr * expr * expr option | ETry of expr * string * expr | EFunction of string list * expr | EBinop of string * expr * expr | EReturn of expr option | EBreak of expr option | EContinue | ENext of expr * expr | EObject of (string * expr) list | ELabel of string | ESwitch of expr * (expr * expr) list * expr option | ENeko of string and expr = expr_decl * pos let pos = snd let null_pos = { pline = 0; psource = "" } let mk_call v args p = ECall (v,args) , p let mk_call0 v p = ECall (v,[]) , p let mk_call1 v a p = ECall (v,[a]) , p let mk_ident i p = EConst (Ident i) , p let mk_builtin b p = EConst (Builtin b) , p let mk_int i p = EConst (Int i) , p let mk_string s p = EConst (String s) , p let mk_binop op e1 e2 p = EBinop (op,e1,e2) , p let map f (e,p) = (match e with | EBlock el -> EBlock (List.map f el) | EParenthesis e -> EParenthesis (f e) | EField (e,s) -> EField (f e, s) | ECall (e,el) -> ECall (f e, List.map f el) | EArray (e1,e2) -> EArray (f e1, f e2) | EVars vl -> EVars (List.map (fun (v,e) -> v , match e with None -> None | Some e -> Some (f e)) vl) | EWhile (e1,e2,flag) -> EWhile (f e1, f e2, flag) | EIf (e,e1,e2) -> EIf (f e, f e1, match e2 with None -> None | Some e -> Some (f e)) | ETry (e,ident,e2) -> ETry (f e, ident, f e2) | EFunction (params,e) -> EFunction (params, f e) | EBinop (op,e1,e2) -> EBinop (op, f e1, f e2) | EReturn (Some e) -> EReturn (Some (f e)) | EBreak (Some e) -> EBreak (Some (f e)) | ENext (e1,e2) -> ENext (f e1,f e2) | EObject fl -> EObject (List.map (fun (s,e) -> s , f e) fl) | ESwitch (e,cases,def) -> ESwitch (f e,List.map (fun(e1,e2) -> f e1, f e2) cases,match def with None -> None | Some e -> Some (f e)) | EReturn None | EBreak None | EContinue | ENeko _ | ELabel _ | EConst _ as x -> x) , p let iter f (e,p) = match e with | EBlock el -> List.iter f el | EParenthesis e -> f e | EField (e,s) -> f e | ECall (e,el) -> f e; List.iter f el | EArray (e1,e2) -> f e1; f e2 | EVars vl -> List.iter (fun (_,e) -> match e with None -> () | Some e -> f e) vl | EWhile (e1,e2,_) -> f e1; f e2 | EIf (e,e1,e2) -> f e; f e1; (match e2 with None -> () | Some e -> f e) | ETry (e1,_,e2) -> f e1; f e2 | EFunction (_,e) -> f e | EBinop (_,e1,e2) -> f e1; f e2 | EReturn (Some e) -> f e | EBreak (Some e) -> f e | ENext (e1,e2) -> f e1; f e2 | EObject fl -> List.iter (fun (_,e) -> f e) fl | ESwitch (e,cases,def) -> f e; List.iter (fun(e1,e2) -> f e1; f e2) cases; (match def with None -> () | Some e -> f e) | EReturn None | EBreak None | EContinue | ENeko _ | ELabel _ | EConst _ -> () let is_printable c = c >= '\032' && c <= '\126' let escape s = let b = Buffer.create (String.length s) in for i = 0 to (String.length s) - 1 do match s.[i] with | '\n' -> Buffer.add_string b "\\n" | '\t' -> Buffer.add_string b "\\t" | '\r' -> Buffer.add_string b "\\r" | '\\' -> Buffer.add_string b "\\\\" | c when c == '"' || not (is_printable c) -> Buffer.add_string b (Printf.sprintf "\\%.3d" (int_of_char c)) | c -> Buffer.add_char b c done; Buffer.contents b let s_constant = function | True -> "true" | False -> "false" | Null -> "null" | This -> "this" | Int i -> string_of_int i | Float s -> s | String s -> "\"" ^ escape s ^ "\"" | Builtin s -> "$" ^ s | Ident s -> s | Int32 i -> Int32.to_string i haxe_4.2.4.orig/libs/neko/nbytecode.ml0000644000175000017500000002013014146064214017570 0ustar andyandy00000000000000(* * Neko Compiler * Copyright (c)2005 Motion-Twin * * This library is free software; you can redistribute it and/lor * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, lor (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY lor FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License lor the LICENSE file for more details. *) type opcode = (* getters *) | AccNull | AccTrue | AccFalse | AccThis | AccInt of int | AccStack of int | AccGlobal of int | AccEnv of int | AccField of string | AccArray | AccIndex of int | AccBuiltin of string (* setters *) | SetStack of int | SetGlobal of int | SetEnv of int | SetField of string | SetArray | SetIndex of int | SetThis (* stack ops *) | Push | Pop of int | Call of int | ObjCall of int | Jump of int | JumpIf of int | JumpIfNot of int | Trap of int | EndTrap | Ret of int | MakeEnv of int | MakeArray of int (* value ops *) | Bool | IsNull | IsNotNull | Add | Sub | Mult | Div | Mod | Shl | Shr | UShr | Or | And | Xor | Eq | Neq | Gt | Gte | Lt | Lte | Not (* extra ops *) | TypeOf | Compare | Hash | New | JumpTable of int | Apply of int | AccStack0 | AccStack1 | AccIndex0 | AccIndex1 | PhysCompare | TailCall of int * int | Loop (* ocaml-specific *) | AccInt32 of int32 type global = | GlobalVar of string | GlobalFunction of int * int | GlobalString of string | GlobalFloat of string | GlobalDebug of string array * ((int * int) array) | GlobalVersion of int exception Invalid_file let error msg = failwith msg let trap_stack_delta = 6 let hash_field f = let h = ref 0 in for i = 0 to String.length f - 1 do h := !h * 223 + int_of_char (String.unsafe_get f i); done; if Sys.word_size = 64 then Int32.to_int (Int32.shift_right (Int32.shift_left (Int32.of_int !h) 1) 1) else !h let op_param x = match x with | AccInt _ | AccInt32 _ | AccStack _ | AccGlobal _ | AccEnv _ | AccField _ | AccBuiltin _ | SetStack _ | SetGlobal _ | SetEnv _ | SetField _ | Pop _ | Call _ | ObjCall _ | Jump _ | JumpIf _ | JumpIfNot _ | JumpTable _ | Trap _ | MakeEnv _ | MakeArray _ | Ret _ | AccIndex _ | SetIndex _ | Apply _ | TailCall _ -> true | AccNull | AccTrue | AccFalse | AccThis | AccArray | SetArray | SetThis | Push | EndTrap | Bool | Add | Sub | Mult | Div | Mod | Shl | Shr | UShr | Or | And | Xor | Eq | Neq | Gt | Gte | Lt | Lte | IsNull | IsNotNull | Not | TypeOf | Compare | Hash | New | AccStack0 | AccStack1 | AccIndex0 | AccIndex1 | PhysCompare | Loop -> false let code_tables ops = let ids = Hashtbl.create 0 in let fids = DynArray.create() in Array.iter (fun x -> match x with | AccField s | SetField s | AccBuiltin s -> let id = hash_field s in (try let f = Hashtbl.find ids id in if f <> s then error("Field hashing conflict " ^ s ^ " and " ^ f); with Not_found -> Hashtbl.add ids id s; DynArray.add fids s ) | _ -> () ) ops; let p = ref 0 in let pos = Array.make (Array.length(ops) + 1) 0 in Array.iteri (fun i op -> pos.(i) <- !p; p := !p + (if op_param op then 2 else 1); ) ops; pos.(Array.length ops) <- !p; (DynArray.to_array fids , pos , !p) let write_debug_infos ch files inf = let nfiles = Array.length files in (* // the encoding of nfiles was set to keep // backward compatibility with 1.3 which // only allowed up to 127 filenames *) let lot_of_files = ref false in if nfiles < 0x80 then IO.write_byte ch nfiles else if nfiles < 0x8000 then begin lot_of_files := true; IO.write_byte ch ((nfiles lsr 8) lor 0x80); IO.write_byte ch (nfiles land 0xFF); end else assert false; Array.iter (fun s -> IO.write_string ch s) files; IO.write_i32 ch (Array.length inf); let curfile = ref 0 in let curpos = ref 0 in let rcount = ref 0 in let rec flush_repeat p = if !rcount > 0 then begin if !rcount > 15 then begin IO.write_byte ch ((15 lsl 2) lor 2); rcount := !rcount - 15; flush_repeat(p) end else begin let delta = p - !curpos in let delta = (if delta > 0 && delta < 4 then delta else 0) in IO.write_byte ch ((delta lsl 6) lor (!rcount lsl 2) lor 2); rcount := 0; curpos := !curpos + delta; end end in Array.iter (fun (f,p) -> if f <> !curfile then begin flush_repeat(p); curfile := f; if !lot_of_files then begin IO.write_byte ch ((f lsr 7) lor 1); IO.write_byte ch (f land 0xFF); end else IO.write_byte ch ((f lsl 1) lor 1); end; if p <> !curpos then flush_repeat(p); if p = !curpos then rcount := !rcount + 1 else let delta = p - !curpos in if delta > 0 && delta < 32 then IO.write_byte ch ((delta lsl 3) lor 4) else begin IO.write_byte ch (p lsl 3); IO.write_byte ch (p lsr 5); IO.write_byte ch (p lsr 13); end; curpos := p; ) inf; flush_repeat(!curpos) let write ch (globals,ops) = IO.nwrite_string ch "NEKO"; let ids , pos , csize = code_tables ops in IO.write_i32 ch (Array.length globals); IO.write_i32 ch (Array.length ids); IO.write_i32 ch csize; Array.iter (fun x -> match x with | GlobalVar s -> IO.write_byte ch 1; IO.write_string ch s | GlobalFunction (p,nargs) -> IO.write_byte ch 2; IO.write_i32 ch (pos.(p) lor (nargs lsl 24)) | GlobalString s -> IO.write_byte ch 3; IO.write_ui16 ch (String.length s); IO.nwrite_string ch s | GlobalFloat s -> IO.write_byte ch 4; IO.write_string ch s | GlobalDebug (files,inf) -> IO.write_byte ch 5; write_debug_infos ch files inf; | GlobalVersion v -> IO.write_byte ch 6; IO.write_byte ch v ) globals; Array.iter (fun s -> IO.write_string ch s; ) ids; Array.iteri (fun i op -> let pop = ref None in let opid = (match op with | AccNull -> 0 | AccTrue -> 1 | AccFalse -> 2 | AccThis -> 3 | AccInt n -> pop := Some n; 4 | AccInt32 n -> let opid = 4 in IO.write_byte ch ((opid lsl 2) lor 3); IO.write_real_i32 ch n; -1 | AccStack n -> pop := Some (n - 2); 5 | AccGlobal n -> pop := Some n; 6 | AccEnv n -> pop := Some n; 7 | AccField s -> pop := Some (hash_field s); 8 | AccArray -> 9 | AccIndex n -> pop := Some (n - 2); 10 | AccBuiltin s -> pop := Some (hash_field s); 11 | SetStack n -> pop := Some n; 12 | SetGlobal n -> pop := Some n; 13 | SetEnv n -> pop := Some n; 14 | SetField s -> pop := Some (hash_field s); 15 | SetArray -> 16 | SetIndex n -> pop := Some n; 17 | SetThis -> 18 | Push -> 19 | Pop n -> pop := Some n; 20 | Call n -> pop := Some n; 21 | ObjCall n -> pop := Some n; 22 | Jump n -> pop := Some (pos.(i+n) - pos.(i)); 23 | JumpIf n -> pop := Some (pos.(i+n) - pos.(i)); 24 | JumpIfNot n -> pop := Some (pos.(i+n) - pos.(i)); 25 | Trap n -> pop := Some (pos.(i+n) - pos.(i)); 26 | EndTrap -> 27 | Ret n -> pop := Some n; 28 | MakeEnv n -> pop := Some n; 29 | MakeArray n -> pop := Some n; 30 | Bool -> 31 | IsNull -> 32 | IsNotNull -> 33 | Add -> 34 | Sub -> 35 | Mult -> 36 | Div -> 37 | Mod -> 38 | Shl -> 39 | Shr -> 40 | UShr -> 41 | Or -> 42 | And -> 43 | Xor -> 44 | Eq -> 45 | Neq -> 46 | Gt -> 47 | Gte -> 48 | Lt -> 49 | Lte -> 50 | Not -> 51 | TypeOf -> 52 | Compare -> 53 | Hash -> 54 | New -> 55 | JumpTable n -> pop := Some n; 56 | Apply n -> pop := Some n; 57 | AccStack0 -> 58 | AccStack1 -> 59 | AccIndex0 -> 60 | AccIndex1 -> 61 | PhysCompare -> 62 | TailCall (args,st) -> pop := Some (args lor (st lsl 3)); 63 | Loop -> pop := Some 64; 0 ) in match !pop with | None -> if opid >= 0 then IO.write_byte ch (opid lsl 2) | Some n -> if opid < 32 && (n = 0 || n = 1) then IO.write_byte ch ((opid lsl 3) lor (n lsl 2) lor 1) else if n >= 0 && n <= 0xFF then begin IO.write_byte ch ((opid lsl 2) lor 2); IO.write_byte ch n; end else begin IO.write_byte ch ((opid lsl 2) lor 3); IO.write_i32 ch n; end ) ops haxe_4.2.4.orig/libs/neko/ncompile.ml0000644000175000017500000006476314146064214017446 0ustar andyandy00000000000000(* * Neko Compiler * Copyright (c)2005 Motion-Twin * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License or the LICENSE file for more details. *) open Nast open Nbytecode type access = | XEnv of int | XStack of int | XGlobal of int | XField of string | XIndex of int | XArray | XThis type label = { lname : string; ltraps : int list; lstack : int; mutable lpos : int option; mutable lwait : (unit -> unit) list; } type globals = { globals : (global,int) Hashtbl.t; gobjects : (string list,int) Hashtbl.t; mutable functions : (opcode DynArray.t * (int * int) DynArray.t * int * int) list; mutable gtable : global DynArray.t; labels : (string,label) Hashtbl.t; hfiles : (string,int) Hashtbl.t; files : string DynArray.t; } type context = { g : globals; version : int; mutable ops : opcode DynArray.t; mutable locals : (string,int) PMap.t; mutable env : (string,int) PMap.t; mutable nenv : int; mutable stack : int; mutable loop_limit : int; mutable loop_traps : int; mutable limit : int; mutable traps : int list; mutable breaks : ((unit -> unit) * pos) list; mutable continues : ((unit -> unit) * pos) list; mutable pos : (int * int) DynArray.t; mutable curpos : (int * int); mutable curfile : string; } type error_msg = string exception Error of error_msg * pos let error e p = raise (Error(e,p)) let error_msg s = s let stack_delta o = match o with | AccNull | AccTrue | AccFalse | AccThis | AccInt _ | AccInt32 _ | AccStack _ | AccGlobal _ | AccEnv _ | AccField _ | AccBuiltin _ | AccIndex _ | JumpIf _ | JumpIfNot _ | Jump _ | JumpTable _ | Ret _ | SetGlobal _ | SetStack _ | SetEnv _ | SetThis | Bool | IsNull | IsNotNull | Not | Hash | TypeOf | New | AccStack0 | AccStack1 | AccIndex0 | AccIndex1 | Loop -> 0 | Add | Sub | Mult | Div | Mod | Shl | Shr | UShr | Or | And | Xor | Eq | Neq | Gt | Gte | Lt | Lte | PhysCompare -> -1 | AccArray -> -1 | SetField _ | SetIndex _ | Compare -> -1 | SetArray -> -2 | Push -> 1 | Pop x -> -x | Apply nargs | Call nargs | TailCall (nargs,_) -> -nargs | ObjCall nargs -> -(nargs + 1) | MakeEnv size | MakeArray size -> -size | Trap _ -> trap_stack_delta | EndTrap -> -trap_stack_delta let check_stack ctx stack p = if ctx.stack <> stack then error "Stack alignment failure" p let pos ctx = DynArray.length ctx.ops let real_null_pos = { pline = 0; psource = "" } let set_pos ctx p = if p.psource = ctx.curfile then begin if p.pline <> snd ctx.curpos then ctx.curpos <- (fst ctx.curpos, p.pline); end else if p = real_null_pos then () else let fid = (try Hashtbl.find ctx.g.hfiles p.psource with Not_found -> let fid = DynArray.length ctx.g.files in DynArray.add ctx.g.files p.psource; Hashtbl.add ctx.g.hfiles p.psource fid; fid ) in ctx.curfile <- p.psource; ctx.curpos <- (fid,p.pline) let write ctx op = ctx.stack <- ctx.stack + stack_delta op; DynArray.add ctx.pos ctx.curpos; if op_param op then DynArray.add ctx.pos ctx.curpos; DynArray.add ctx.ops op let jmp ctx = let p = pos ctx in write ctx (Jump 0); (fun() -> DynArray.set ctx.ops p (Jump(pos ctx - p))) let cjmp cond ctx = let p = pos ctx in write ctx (Jump 0); (fun() -> DynArray.set ctx.ops p (if cond then JumpIf(pos ctx - p) else JumpIfNot(pos ctx - p))) let trap ctx = let p = pos ctx in write ctx (Trap 0); (fun() -> DynArray.set ctx.ops p (Trap(pos ctx - p))) let goto ctx p = write ctx (Jump(p - pos ctx)) let global ctx g = let ginf = ctx.g in try Hashtbl.find ginf.globals g with Not_found -> let gid = DynArray.length ginf.gtable in Hashtbl.add ginf.globals g gid; DynArray.add ginf.gtable g; gid let save_breaks ctx = let oldc = ctx.continues in let oldb = ctx.breaks in let oldl = ctx.loop_limit in let oldt = ctx.loop_traps in ctx.loop_traps <- List.length ctx.traps; ctx.loop_limit <- ctx.stack; ctx.breaks <- []; ctx.continues <- []; (ctx , oldc, oldb , oldl, oldt) let process_continues (ctx,oldc,_,_,_) = List.iter (fun (f,_) -> f()) ctx.continues; ctx.continues <- oldc let process_breaks (ctx,_,oldb,oldl, oldt) = List.iter (fun (f,_) -> f()) ctx.breaks; ctx.loop_limit <- oldl; ctx.loop_traps <- oldt; ctx.breaks <- oldb let check_breaks ctx = List.iter (fun (_,p) -> error "Break outside a loop" p) ctx.breaks; List.iter (fun (_,p) -> error "Continue outside a loop" p) ctx.continues let make_array p el = (ECall ((EConst (Builtin "array"),p),el), p) let get_cases_ints(cases) = let max = ref (-1) in let l = List.map (fun (e,e2) -> match e with | (EConst (Int n),_) when n >= 0 -> if n > !max then max := n; (n,e2) | _ -> raise Exit ) cases in (* // only create jump table if small or >10% cases matched *) let nmatches = List.length l in if nmatches < 3 then raise Exit; if !max >= 16 && (nmatches * 100) / (!max + 1) < 10 then raise Exit; if !max > 512 then raise Exit; (l,!max + 1) let rec scan_labels ctx supported in_block e = match fst e with | EFunction (args,e) -> let nargs = List.length args in let traps = ctx.traps in ctx.traps <- []; ctx.stack <- ctx.stack + nargs; scan_labels ctx supported false e; ctx.stack <- ctx.stack - nargs; ctx.traps <- traps | EBlock _ -> let old = ctx.stack in Nast.iter (scan_labels ctx supported true) e; ctx.stack <- old | EVars l -> if not in_block then error "Variable declaration must be done inside a block" (snd e); List.iter (fun (_,e) -> (match e with | None -> () | Some e -> scan_labels ctx supported false e); ctx.stack <- ctx.stack + 1 ) l | ELabel l when not supported -> error "Label is not supported in this part of the program" (snd e); | ELabel l when Hashtbl.mem ctx.g.labels l -> error ("Duplicate label " ^ l) (snd e) | ELabel l -> let label = { lname = l; ltraps = List.rev ctx.traps; lstack = ctx.stack; lpos = None; lwait = []; } in Hashtbl.add ctx.g.labels l label | ETry (e,_,e2) -> ctx.stack <- ctx.stack + trap_stack_delta; ctx.traps <- ctx.stack :: ctx.traps; scan_labels ctx supported false e; ctx.stack <- ctx.stack - trap_stack_delta; ctx.traps <- (match ctx.traps with [] -> assert false | _ :: l -> l); ctx.stack <- ctx.stack + 1; scan_labels ctx supported false e2; ctx.stack <- ctx.stack - 1; | EBinop ("=",e1,e2) -> let rec is_extended (e,_) = match e with | EParenthesis e -> is_extended e | EArray _ | EField _ -> true | _ -> false in let ext = is_extended e1 in if ext then ctx.stack <- ctx.stack + 1; scan_labels ctx supported false e2; ctx.stack <- ctx.stack + 1; scan_labels ctx supported false e1; ctx.stack <- ctx.stack - (if ext then 2 else 1); | ECall ((EConst (Builtin "array"),_),e :: el) -> if ctx.version >= 2 then begin scan_labels ctx supported false e; List.iter (fun e -> ctx.stack <- ctx.stack + 1; scan_labels ctx supported false e; ) el; ctx.stack <- ctx.stack - List.length el end else begin List.iter (fun e -> scan_labels ctx supported false e; ctx.stack <- ctx.stack + 1; ) el; scan_labels ctx supported false e; ctx.stack <- ctx.stack - List.length el end | ECall ((EConst (Builtin x),_),el) when x <> "apply" -> Nast.iter (scan_labels ctx false false) e | ECall ((EConst (Builtin "apply"),_),e :: el) | ECall(e,el) -> List.iter (fun e -> scan_labels ctx supported false e; ctx.stack <- ctx.stack + 1; ) el; scan_labels ctx supported false e; ctx.stack <- ctx.stack - List.length el | EObject fl -> ctx.stack <- ctx.stack + 2; List.iter (fun (s,e) -> scan_labels ctx supported false e ) fl; ctx.stack <- ctx.stack - 2; | ESwitch (ee,[(econd,exec)],eo) -> let p = snd e in scan_labels ctx supported false (EIf ((EBinop ("==",ee,econd),p),exec,eo),p) | ESwitch (e,cases,eo) -> scan_labels ctx supported false e; let delta = (try ignore(get_cases_ints cases); 0 with Exit -> 1) in ctx.stack <- ctx.stack + delta; List.iter (fun (e1,e2) -> ctx.stack <- ctx.stack + delta; scan_labels ctx supported false e1; ctx.stack <- ctx.stack - delta; scan_labels ctx supported false e2; ) cases; (match eo with | None -> () | Some e -> scan_labels ctx supported false e); ctx.stack <- ctx.stack - delta; | ENext (e1,e2) -> scan_labels ctx supported in_block e1; scan_labels ctx supported in_block e2; | EConst _ | EContinue | EBreak _ | EReturn _ | EIf _ | EWhile _ | EParenthesis _ -> Nast.iter (scan_labels ctx supported false) e | EBinop (_,_,_) | EArray _ | EField _ -> Nast.iter (scan_labels ctx false false) e | ENeko _ -> assert false let compile_constant ctx c p = match c with | True -> write ctx AccTrue | False -> write ctx AccFalse | Null -> write ctx AccNull | This -> write ctx AccThis | Int n -> write ctx (AccInt n) | Int32 n -> write ctx (AccInt32 n) | Float f -> write ctx (AccGlobal (global ctx (GlobalFloat f))) | String s -> write ctx (AccGlobal (global ctx (GlobalString s))) | Builtin s -> (match s with | "tnull" -> write ctx (AccInt 0) | "tint" -> write ctx (AccInt 1) | "tfloat" -> write ctx (AccInt 2) | "tbool" -> write ctx (AccInt 3) | "tstring" -> write ctx (AccInt 4) | "tobject" -> write ctx (AccInt 5) | "tarray" -> write ctx (AccInt 6) | "tfunction" -> write ctx (AccInt 7) | "tabstract" -> write ctx (AccInt 8) | s -> write ctx (AccBuiltin s)) | Ident s -> try let l = PMap.find s ctx.locals in if l <= ctx.limit then let e = (try PMap.find s ctx.env with Not_found -> let e = ctx.nenv in ctx.nenv <- ctx.nenv + 1; ctx.env <- PMap.add s e ctx.env; e ) in write ctx (AccEnv e); else let p = ctx.stack - l in write ctx (if p = 0 then AccStack0 else if p = 1 then AccStack1 else AccStack p); with Not_found -> let g = global ctx (GlobalVar s) in write ctx (AccGlobal g) let rec compile_access ctx e = match fst e with | EConst (Ident s) -> (try let l = PMap.find s ctx.locals in if l <= ctx.limit then let e = (try PMap.find s ctx.env with Not_found -> let e = ctx.nenv in ctx.nenv <- ctx.nenv + 1; ctx.env <- PMap.add s e ctx.env; e ) in XEnv e else XStack l with Not_found -> let g = global ctx (GlobalVar s) in XGlobal g) | EField (e,f) -> compile ctx false e; write ctx Push; XField f | EArray (e1,(EConst (Int n),_)) -> compile ctx false e1; write ctx Push; XIndex n | EArray (ea,ei) -> compile ctx false ei; write ctx Push; compile ctx false ea; write ctx Push; XArray | EConst This -> XThis | _ -> error "Invalid access" (snd e) and compile_access_set ctx a = match a with | XEnv n -> write ctx (SetEnv n) | XStack l -> write ctx (SetStack (ctx.stack - l)) | XGlobal g -> write ctx (SetGlobal g) | XField f -> write ctx (SetField f) | XIndex i -> write ctx (SetIndex i) | XThis -> write ctx SetThis | XArray -> write ctx SetArray and compile_access_get ctx a = match a with | XEnv n -> write ctx (AccEnv n) | XStack l -> write ctx (AccStack (ctx.stack - l)) | XGlobal g -> write ctx (AccGlobal g) | XField f -> write ctx (AccField f) | XIndex i -> write ctx (AccIndex i) | XThis -> write ctx AccThis | XArray -> write ctx Push; write ctx (AccStack 2); write ctx AccArray and write_op ctx op p = match op with | "+" -> write ctx Add | "-" -> write ctx Sub | "/" -> write ctx Div | "*" -> write ctx Mult | "%" -> write ctx Mod | "<<" -> write ctx Shl | ">>" -> write ctx Shr | ">>>" -> write ctx UShr | "|" -> write ctx Or | "&" -> write ctx And | "^" -> write ctx Xor | "==" -> write ctx Eq | "!=" -> write ctx Neq | ">" -> write ctx Gt | ">=" -> write ctx Gte | "<" -> write ctx Lt | "<=" -> write ctx Lte | _ -> error "Unknown operation" p and compile_binop ctx tail op e1 e2 p = match op with | "=" -> let a = compile_access ctx e1 in compile ctx false e2; compile_access_set ctx a | "&&" -> compile ctx false e1; let jnext = cjmp false ctx in compile ctx tail e2; jnext() | "||" -> compile ctx false e1; let jnext = cjmp true ctx in compile ctx tail e2; jnext() | "++=" | "--=" -> write ctx Push; let base = ctx.stack in let a = compile_access ctx e1 in compile_access_get ctx a; write ctx (SetStack(ctx.stack - base)); write ctx Push; compile ctx false e2; write_op ctx (String.sub op 0 (String.length op - 2)) p; compile_access_set ctx a; write ctx (AccStack 0); write ctx (Pop 1); | "+=" | "-=" | "/=" | "*=" | "%=" | "<<=" | ">>=" | ">>>=" | "|=" | "&=" | "^=" -> let a = compile_access ctx e1 in compile_access_get ctx a; write ctx Push; compile ctx false e2; write_op ctx (String.sub op 0 (String.length op - 1)) p; compile_access_set ctx a | _ -> match (op , e1 , e2) with | ("==" , _ , (EConst Null,_)) -> compile ctx false e1; write ctx IsNull | ("!=" , _ , (EConst Null,_)) -> compile ctx false e1; write ctx IsNotNull | ("==" , (EConst Null,_) , _) -> compile ctx false e2; write ctx IsNull | ("!=" , (EConst Null,_) , _) -> compile ctx false e2; write ctx IsNotNull | ("-", (EConst (Int 0),_) , (EConst (Int i),_)) -> compile ctx tail (EConst (Int (-i)),p) | _ -> compile ctx false e1; write ctx Push; compile ctx false e2; write_op ctx op p and compile_function main params e = let ctx = { g = main.g; (* // reset *) ops = DynArray.create(); pos = DynArray.create(); breaks = []; continues = []; env = PMap.empty; nenv = 0; traps = []; loop_traps = 0; limit = main.stack; (* // dup *) version = main.version; stack = main.stack; locals = main.locals; loop_limit = main.loop_limit; curpos = main.curpos; curfile = main.curfile; } in List.iter (fun v -> ctx.stack <- ctx.stack + 1; ctx.locals <- PMap.add v ctx.stack ctx.locals; ) params; let s = ctx.stack in compile ctx true e; write ctx (Ret (ctx.stack - ctx.limit)); check_stack ctx s (snd e); check_breaks ctx; (* // add let *) let gid = DynArray.length ctx.g.gtable in ctx.g.functions <- (ctx.ops,ctx.pos,gid,List.length params) :: ctx.g.functions; DynArray.add ctx.g.gtable (GlobalFunction(gid,-1)); (* // environment *) if ctx.nenv > 0 then let a = Array.make ctx.nenv "" in PMap.iter (fun v i -> a.(i) <- v) ctx.env; Array.iter (fun v -> compile_constant main (Ident v) (snd e); write main Push; ) a; write main (AccGlobal gid); write main (MakeEnv ctx.nenv); else write main (AccGlobal gid); and compile_builtin ctx tail b el p = match (b , el) with | ("istrue" , [e]) -> compile ctx false e; write ctx Bool | ("not" , [e]) -> compile ctx false e; write ctx Not | ("typeof" , [e]) -> compile ctx false e; write ctx TypeOf | ("hash" , [e]) -> compile ctx false e; write ctx Hash | ("new" , [e]) -> compile ctx false e; write ctx New | ("compare" , [e1;e2]) -> compile ctx false e1; write ctx Push; compile ctx false e2; write ctx Compare | ("pcompare" , [e1;e2]) -> compile ctx false e1; write ctx Push; compile ctx false e2; write ctx PhysCompare | ("goto" , [(EConst (Ident l) , _)] ) -> let l = (try Hashtbl.find ctx.g.labels l with Not_found -> error ("Unknown label " ^ l) p) in let os = ctx.stack in let rec loop l1 l2 = match l1, l2 with | x :: l1 , y :: l2 when x == y -> loop l1 l2 | _ -> (l1,l2) in let straps , dtraps = loop (List.rev ctx.traps) l.ltraps in List.iter (fun l -> if ctx.stack <> l then write ctx (Pop(ctx.stack - l)); write ctx EndTrap; ) (List.rev straps); let dtraps = List.map (fun l -> let l = l - trap_stack_delta in if l < ctx.stack then write ctx (Pop(ctx.stack - l)); while ctx.stack < l do write ctx Push; done; trap ctx ) dtraps in if l.lstack < ctx.stack then write ctx (Pop(ctx.stack - l.lstack)); while l.lstack > ctx.stack do write ctx Push; done; ctx.stack <- os; (match l.lpos with | None -> l.lwait <- jmp ctx :: l.lwait | Some p -> write ctx (Jump p)); List.iter (fun t -> t(); write ctx Push; compile_constant ctx (Builtin "raise") p; write ctx (Call 1); (* // insert an infinite loop in order to // comply with bytecode checker *) let _ = jmp ctx in () ) dtraps; | ("goto" , _) -> error "Invalid $goto statement" p | ("array",e :: el) -> let count = List.length el in (* // a single let can't have >128 stack *) if count > 120 - ctx.stack && count > 8 then begin (* // split in 8 and recurse *) let part = count lsr 3 in let rec loop el acc count = match el with | [] -> [List.rev acc] | e :: l -> if count == part then (List.rev acc) :: loop el [] 0 else loop l (e :: acc) (count + 1) in let arr = make_array p (List.map (make_array p) (loop (e :: el) [] 0)) in compile_builtin ctx tail "aconcat" [arr] p; end else if ctx.version >= 2 then begin compile ctx false e; List.iter (fun e -> write ctx Push; compile ctx false e; ) el; write ctx (MakeArray count); end else begin List.iter (fun e -> compile ctx false e; write ctx Push; ) el; compile ctx false e; write ctx (MakeArray count); end | ("apply",e :: el) -> List.iter (fun e -> compile ctx false e; write ctx Push; ) el; compile ctx false e; let nargs = List.length el in if nargs > 0 then write ctx (Apply nargs); | _ -> List.iter (fun e -> compile ctx false e; write ctx Push; ) el; compile_constant ctx (Builtin b) p; if tail then write ctx (TailCall(List.length el,ctx.stack - ctx.limit)) else write ctx (Call (List.length el)) and compile ctx tail (e,p) = set_pos ctx p; match e with | EConst c -> compile_constant ctx c p | EBlock [] -> write ctx AccNull | EBlock el -> let locals = ctx.locals in let stack = ctx.stack in let rec loop(el) = match el with | [] -> assert false | [e] -> compile ctx tail e | [e; (ELabel _,_) as f] -> compile ctx tail e; compile ctx tail f | e :: el -> compile ctx false e; loop el in loop el; if stack < ctx.stack then write ctx (Pop (ctx.stack - stack)); check_stack ctx stack p; ctx.locals <- locals | EParenthesis e -> compile ctx tail e | EField (e,f) -> compile ctx false e; write ctx (AccField f) | ECall (e,a :: b :: c :: d :: x1 :: x2 :: l) when (match e with (EConst (Builtin "array"),_) -> false | _ -> true) -> let call = (EConst (Builtin "call"),p) in let args = (ECall ((EConst (Builtin "array"),p),(a :: b :: c :: d :: x1 :: x2 :: l)),p) in (match e with | (EField (e,name) , p2) -> let locals = ctx.locals in let etmp = (EConst (Ident "$tmp"),p2) in compile ctx false (EVars [("$tmp",Some e)],p2); compile ctx tail (ECall (call,[(EField (etmp,name),p2);etmp;args]), p); write ctx (Pop 1); ctx.locals <- locals | _ -> compile ctx tail (ECall (call,[e; (EConst This,p); args]),p)) | ECall ((EConst (Builtin b),_),el) -> compile_builtin ctx tail b el p | ECall ((EField (e,f),_),el) -> List.iter (fun e -> compile ctx false e; write ctx Push; ) el; compile ctx false e; write ctx Push; write ctx (AccField f); write ctx (ObjCall(List.length el)) | ECall (e,el) -> List.iter (fun e -> compile ctx false e; write ctx Push; ) el; compile ctx false e; if tail then write ctx (TailCall(List.length el,ctx.stack - ctx.limit)) else write ctx (Call(List.length el)) | EArray (e1,(EConst (Int n),_)) -> compile ctx false e1; write ctx (if n == 0 then AccIndex0 else if n == 1 then AccIndex1 else AccIndex n) | EArray (e1,e2) -> compile ctx false e1; write ctx Push; compile ctx false e2; write ctx AccArray | EVars vl -> List.iter (fun (v,o) -> (match o with | None -> write ctx AccNull | Some e -> compile ctx false e); write ctx Push; ctx.locals <- PMap.add v ctx.stack ctx.locals; ) vl | EWhile (econd,e,NormalWhile) -> let start = pos ctx in if ctx.version >= 2 then write ctx Loop; compile ctx false econd; let jend = cjmp false ctx in let save = save_breaks ctx in compile ctx false e; process_continues save; goto ctx start; process_breaks save; jend(); | EWhile (econd,e,DoWhile) -> let start = pos ctx in if ctx.version >= 2 then write ctx Loop; let save = save_breaks ctx in compile ctx false e; process_continues save; compile ctx false econd; write ctx (JumpIf (start - pos ctx)); process_breaks save | EIf (e,e1,e2) -> let stack = ctx.stack in compile ctx false e; let jelse = cjmp false ctx in compile ctx tail e1; check_stack ctx stack p; (match e2 with | None -> jelse() | Some e2 -> let jend = jmp ctx in jelse(); compile ctx tail e2; check_stack ctx stack p; jend()) | ETry (e,v,ecatch) -> let trap = trap ctx in ctx.traps <- ctx.stack :: ctx.traps; compile ctx false e; write ctx EndTrap; ctx.traps <- (match ctx.traps with [] -> assert false | _ :: l -> l); let jend = jmp ctx in trap(); write ctx Push; let locals = ctx.locals in ctx.locals <- PMap.add v ctx.stack ctx.locals; compile ctx tail ecatch; write ctx (Pop 1); ctx.locals <- locals; jend() | EBinop (op,e1,e2) -> compile_binop ctx tail op e1 e2 p | EReturn e -> (match e with None -> write ctx AccNull | Some e -> compile ctx (ctx.traps == []) e); let stack = ctx.stack in List.iter (fun t -> if ctx.stack > t then write ctx (Pop(ctx.stack - t)); write ctx EndTrap; ) ctx.traps; write ctx (Ret (ctx.stack - ctx.limit)); ctx.stack <- stack | EBreak e -> (match e with | None -> () | Some e -> compile ctx false e); let s = ctx.stack in let n = ref (List.length ctx.traps - ctx.loop_traps) in List.iter (fun t -> if !n > 0 then begin decr n; if ctx.stack > t then write ctx (Pop(ctx.stack - t)); write ctx EndTrap; end ) ctx.traps; if ctx.loop_limit <> ctx.stack then write ctx (Pop(ctx.stack - ctx.loop_limit)); ctx.stack <- s; ctx.breaks <- (jmp ctx , p) :: ctx.breaks | EContinue -> let s = ctx.stack in let n = ref (List.length ctx.traps - ctx.loop_traps) in List.iter (fun t -> if !n > 0 then begin decr n; if ctx.stack > t then write ctx (Pop(ctx.stack - t)); write ctx EndTrap; end ) ctx.traps; if ctx.loop_limit <> ctx.stack then write ctx (Pop(ctx.stack - ctx.loop_limit)); ctx.stack <- s; ctx.continues <- (jmp ctx , p) :: ctx.continues | EFunction (params,e) -> compile_function ctx params e | ENext (e1,e2) -> compile ctx false e1; compile ctx tail e2 | EObject [] -> write ctx AccNull; write ctx New | EObject fl -> let fields = List.sort compare (List.map fst fl) in let id = (try Hashtbl.find ctx.g.gobjects fields with Not_found -> let id = global ctx (GlobalVar ("o:" ^ string_of_int (Hashtbl.length ctx.g.gobjects))) in Hashtbl.add ctx.g.gobjects fields id; id ) in write ctx (AccGlobal id); write ctx New; write ctx Push; List.iter (fun (f,e) -> write ctx Push; compile ctx false e; write ctx (SetField f); write ctx AccStack0; ) fl; write ctx (Pop 1) | ELabel l -> let l = (try Hashtbl.find ctx.g.labels l with Not_found -> assert false) in if ctx.stack <> l.lstack || List.rev ctx.traps <> l.ltraps then error (Printf.sprintf "Label failure %d %d" ctx.stack l.lstack) p; List.iter (fun f -> f()) l.lwait; l.lwait <- []; l.lpos <- Some (pos ctx) | ESwitch (e,[(econd,exec)],eo) -> compile ctx tail (EIf ((EBinop ("==",e,econd),p),exec,eo),p) | ENeko _ -> assert false | ESwitch (e,cases,eo) -> try let ints , size = get_cases_ints cases in compile ctx false e; write ctx (JumpTable size); let tbl = Array.make size None in List.iter (fun (i,e) -> tbl.(i) <- Some e; ) ints; let tbl = Array.map (fun e -> (jmp ctx,e)) tbl in Array.iter (fun (j,e) -> if e == None then j() ) tbl; (match eo with | None -> write ctx AccNull | Some e -> compile ctx tail e); let jump_end = jmp ctx in let tbl = Array.map (fun (j,e) -> match e with | Some e -> j(); compile ctx tail e; jmp ctx | None -> (fun() -> ()) ) tbl in jump_end(); Array.iter (fun j -> j()) tbl with Exit -> compile ctx false e; write ctx Push; let jumps = List.map (fun (e1,e2) -> write ctx AccStack0; write ctx Push; compile ctx false e1; write ctx Eq; (cjmp true ctx , e2) ) cases in (match eo with | None -> write ctx AccNull | Some e -> compile ctx tail (EBlock [e],p)); let jump_end = jmp ctx in let jumps = List.map (fun (j,e) -> j(); compile ctx tail (EBlock [e],p); jmp ctx; ) jumps in jump_end(); List.iter (fun j -> j()) jumps; write ctx (Pop 1) let compile version ast = let g = { globals = Hashtbl.create 0; gobjects = Hashtbl.create 0; gtable = DynArray.create(); functions = []; labels = Hashtbl.create 0; hfiles = Hashtbl.create 0; files = DynArray.create(); } in let ctx = { g = g; version = version; stack = 0; loop_limit = 0; loop_traps = 0; limit = -1; locals = PMap.empty; ops = DynArray.create(); breaks = []; continues = []; env = PMap.empty; nenv = 0; traps = []; pos = DynArray.create(); curpos = (0,0); curfile = "_"; } in if version >= 2 then DynArray.add g.gtable (GlobalVersion version); scan_labels ctx true true ast; compile ctx false ast; check_breaks ctx; if g.functions <> [] || Hashtbl.length g.gobjects <> 0 then begin let ctxops = ctx.ops in let ctxpos = ctx.pos in let ops = DynArray.create() in let pos = DynArray.create() in ctx.pos <- pos; ctx.ops <- ops; write ctx (Jump 0); List.iter (fun (fops,fpos,gid,nargs) -> DynArray.set g.gtable gid (GlobalFunction(DynArray.length ops,nargs)); DynArray.append fops ops; DynArray.append fpos pos; ) (List.rev g.functions); DynArray.set ops 0 (Jump (DynArray.length ops)); let objects = DynArray.create() in Hashtbl.iter (fun fl g -> DynArray.add objects (fl,g)) g.gobjects; let objects = DynArray.to_array objects in Array.sort (fun (_,g1) (_,g2) -> g1 - g2) objects; Array.iter (fun (fl,g) -> write ctx AccNull; write ctx New; write ctx (SetGlobal g); List.iter (fun f -> write ctx (AccGlobal g); write ctx Push; write ctx (SetField f); ) fl ) objects; DynArray.append ctxpos pos; DynArray.append ctxops ops; end; DynArray.add g.gtable (GlobalDebug (DynArray.to_array ctx.g.files,DynArray.to_array ctx.pos)); (DynArray.to_array g.gtable, DynArray.to_array ctx.ops) haxe_4.2.4.orig/libs/neko/nxml.ml0000644000175000017500000001127714146064214016606 0ustar andyandy00000000000000(* * Neko NXML for OCaml * Copyright (c)2005 Nicolas Cannasse * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *) open Nast type xml = | Node of string * (string * string) list * xml list | CData of string let node name att childs = Node(name,att,childs) let rec to_xml_rec p2 ast = let e , p = ast in let name = ref "" in let aval = ref None in let childs = ref [] in (match e with | EConst c -> (match c with | True | False | Null | This | Builtin _ | Ident _ -> name := "v"; aval := Some (s_constant c) | Int i -> name := "i"; aval := Some (string_of_int i); | Float s -> name := "f"; aval := Some s; | String s -> name := "s"; aval := Some s; | Int32 i -> name := "i"; aval := Some (Int32.to_string i); ) | EBlock el -> name := "b"; childs := List.map (to_xml_rec p) el; | EParenthesis e -> name := "p"; childs := [to_xml_rec p e]; | EField (e,f) -> name := "g"; aval := Some f; childs := [to_xml_rec p e]; | ECall (e,el) -> name := "c"; childs := to_xml_rec p e :: List.map (to_xml_rec p) el; | EArray (a,b) -> name := "a"; childs := [to_xml_rec p a; to_xml_rec p b]; | EVars vl -> name := "var"; childs := List.map (fun(v,e) -> node "v" [("v",v)] (match e with None -> [] | Some e -> [to_xml_rec p e]) ) vl; | EWhile (econd,e,NormalWhile) -> name := "while"; childs := [to_xml_rec p econd; to_xml_rec p e]; | EWhile (econd,e,DoWhile) -> name := "do"; childs := [to_xml_rec p e; to_xml_rec p econd]; | EIf (cond,e,eelse) -> name := "if"; childs := to_xml_rec p cond :: to_xml_rec p e :: (match eelse with None -> [] | Some e -> [to_xml_rec p e]) | ETry (e1,v,e2) -> name := "try"; aval := Some v; childs := [to_xml_rec p e1; to_xml_rec p e2]; | EFunction (args,e) -> name := "function"; aval := Some (String.concat ":" args); childs := [to_xml_rec p e]; | EBinop (op,e1,e2) -> name := "o"; aval := Some op; childs := [to_xml_rec p e1; to_xml_rec p e2]; | EReturn e -> name := "return"; childs := (match e with None -> [] | Some e -> [to_xml_rec p e]); | EBreak e -> name := "break"; childs := (match e with None -> [] | Some e -> [to_xml_rec p e]); | EContinue -> name := "continue"; | ENext (e1,e2) -> name := "next"; childs := [to_xml_rec p e1; to_xml_rec p e2]; | EObject fl -> name := "object"; childs := List.map (fun(v,e) -> node "v" [("v",v)] [to_xml_rec p e]) fl; | ELabel v -> name := "label"; aval := Some v; | ESwitch (e,cases,def) -> name := "switch"; let cases = List.map (fun(e1,e2) -> node "case" [] [to_xml_rec p e1; to_xml_rec p e2]) cases in childs := to_xml_rec p e :: (match def with None -> cases | Some e -> node "default" [] [to_xml_rec p e] :: cases ); | ENeko s -> name := "neko"; childs := [CData s]; ); let pos = (if p.psource <> p2.psource then [("p",p.psource ^ ":" ^ string_of_int p.pline)] else if p.pline <> p2.pline then [("p",string_of_int p.pline)] else [] ) in let aval = (match !aval with None -> [] | Some v -> [("v",v)]) in node !name (List.append pos aval) !childs let to_xml ast = to_xml_rec null_pos ast let rec write_fmt_rec tabs ch x = match x with | CData s -> IO.printf ch "%s" tabs s | Node (name,att,childs) -> IO.printf ch "%s<%s%s" tabs name (String.concat "" (List.map (fun(a,v) -> " " ^ a ^ "=\"" ^ escape v ^ "\"") att)); match childs with | [] -> IO.nwrite_string ch "/>" | l -> IO.nwrite_string ch ">\n"; List.iter (fun(x) -> write_fmt_rec (tabs ^ " ") ch x; IO.write ch '\n') l; IO.printf ch "%s" tabs name let write_fmt ch x = write_fmt_rec "" ch (node "nxml" [] [x]) let rec write_rec ch x = match x with | CData s -> IO.printf ch "" s | Node (name,att,childs) -> IO.printf ch "<%s%s" name (String.concat "" (List.map (fun(a,v) -> " " ^ a ^ "=\"" ^ escape v ^ "\"") att)); match childs with | [] -> IO.nwrite_string ch "/>" | l -> IO.nwrite_string ch ">"; List.iter (fun(x) -> write_rec ch x) l; IO.printf ch "" name let write ch x = write_rec ch (node "nxml" [] [x]) haxe_4.2.4.orig/libs/objsize/META0000644000175000017500000000011214146064214016442 0ustar andyandy00000000000000version="0.16" archive(byte)="objsize.cma" archive(native)="objsize.cmxa" haxe_4.2.4.orig/libs/objsize/Makefile0000644000175000017500000000121314146064214017434 0ustar andyandy00000000000000ALL_CFLAGS = $(CFLAGS) -I . LIBS = OCAMLOPT=ocamlopt OCAMLC=ocamlc SRC=objsize.mli objsize.ml all: bytecode native bytecode: objsize.cma native: objsize.cmxa objsize.cma: c_objsize.o $(SRC) $(OCAMLC) -safe-string -a -o objsize.cma $(LIBS) $(SRC) objsize.cmxa: c_objsize.o $(SRC) $(OCAMLOPT) -safe-string -a -o objsize.cmxa $(LIBS) $(SRC) c_objsize.o: c_objsize.c $(OCAMLC) -safe-string $(ALL_CFLAGS) c_objsize.c clean: rm -rf $(wildcard *.cma) $(wildcard *.cmxa) $(wildcard *.cmx) $(wildcard *.cmi) $(wildcard *.cmo) $(wildcard *.obj) $(wildcard *.o) $(wildcard *.a) .PHONY: all bytecode native clean Makefile: ; $(SRC): ; c_objsize.c: ; haxe_4.2.4.orig/libs/objsize/README0000644000175000017500000000572314146064214016666 0ustar andyandy00000000000000What is this? This is a small OCaml library for computing size of OCaml values. It computes count of words used for values, count of values' headers, maximal depth of values. There are functions to get size of values in bytes too. How to use it? See objsize.mli for documentation. How to compile/install it? Run "make " in this directory. Useful make targets are: - lib : build objsize library - tests : build tests with fresh-compiled library - install : install package "objsize" using findlib - uninstall : uninstall package "objsize" - clean : clean working directory - tests-installed : clean working directory and build test programs assuming you have installed package "objsize" using findlib. How it works? C-function walks through values and uses header's field "color" to mark visited values, then restores original values' "color". Colors are stored using rle-like compression to decrease memory usage. Bugs? 1. Some constant values (like lists of integers) are constructed at compile time and placed outside of both heaps, and size of these values will be returned as 0. 2. Internal function is not fully tail-recursive, so generally it uses stack proportionally to the depth of the value. There is an optimization to handle long lists and some other datastructures: when objsize walks through the structured block, the goto is used instead of recursive call to walk into the last value that should be visited. This optimization is not general, and the best solution would be to use heap memory instead of stack memory to store "walk path", but I don't need it now (please contribute if you want). 3. It requires gnu make. It's possible to write Makefile for nmake, but I have no MSVC to test. The best solution is to use ocamlbuild. Either I will write ocamlbuild script later, or you will contribute it. But it's possible to build without any makefiles: see original Makefile for details. 4. OCaml 3.11 has new implementation of heap. Versions of objsize >= 0.12 work only with OCaml 3.11 heap, versions of objsize <= 0.11 work only with OCaml <= 3.10.2 heap. Runtime failure will be raised if you link objsize >= 0.12 with OCaml < 3.11. 5. "Bugs" section is too long. License? Dual: BSD/GPL. Changes? 0.1 - 2007-12-13 - Initial public release. 0.11 - 2007-12-14 - "configure" made right. Now it works on 64-bits too. 0.12 - 2009-04-08 - Works with OCaml 3.11, installs with findlib. 0.13 - 2009-09-01 - Tiny change about so/dll suffix for unix/windows. 0.14 - 2010-01-26 - Fixing so/dll again. Some stack usage optimization, see the modified Bug #2 description. 0.15 - 2010-04-15 - Fixing bug appeared in 0.14. (thanks to Steven Ramsay) 0.16 - 2010-08-11 - Fixing bug appeared in 0.14. (thanks to SerP) Author? Dmitry Grebeniuk haxe_4.2.4.orig/libs/objsize/alloc.c0000644000175000017500000000137414146064214017242 0ustar andyandy00000000000000#if (!defined(ALLOC_PRF) || !defined(ALLOC_TYPE)) #error #endif #include "util.h" #include #include ALLOC_TYPE* ALLOC_PRF(_alloc)(size_t count) { return malloc(count * sizeof(ALLOC_TYPE)); } void ALLOC_PRF(_free)(ALLOC_TYPE* arr) { free(arr); } ALLOC_TYPE* ALLOC_PRF(_realloc)(ALLOC_TYPE* arr, size_t count) { size_t newsz = count * sizeof(ALLOC_TYPE); ALLOC_TYPE* newarr = realloc(arr, newsz); if (count != 0 && newarr == NULL) { static char msg[128]; sprintf ( msg , "realloc(%p, %u*%u=%u) failed: to provide an alternative behaviour." , arr, (unsigned int) count, (unsigned int) sizeof(ALLOC_TYPE) , (unsigned int) newsz ); ABORT(msg); }; return newarr; } #undef ALLOC_PRF #undef ALLOC_TYPE haxe_4.2.4.orig/libs/objsize/bitarray.c0000644000175000017500000000275714146064214017773 0ustar andyandy00000000000000#if ((!defined(PRF))) #error #endif #define BITS_OF_CHAR 8 /* size_t PRF(_sizebytes)(size_t n); TYPE PRF(_get)(TYPE arr[], size_t i); void PRF(_set)(TYPE arr[], size_t i, TYPE val); */ #define ALPRF(x) bitarrayalloc##x #define ALLOC_TYPE unsigned char #define ALLOC_PRF(x) ALPRF(x) #include "alloc.c" size_t wordalign(size_t n) { size_t al = sizeof(int); size_t m = al % n; if (m == 0) { return n; } else { return n + al - m; } } size_t PRF(_sizebytes)(size_t n) { return wordalign(n/BITS_OF_CHAR); } unsigned char* PRF(_alloc)(size_t count) { return ALPRF(_alloc)(PRF(_sizebytes)(count)); } void PRF(_free)(unsigned char* arr) { ALPRF(_free)(arr); } unsigned char* PRF(_realloc)(unsigned char* arr, size_t newcount) { return ALPRF(_realloc)(arr, PRF(_sizebytes)(newcount)); } #define LVAL(arr, i) ((arr)[(i)/BITS_OF_CHAR]) #define MASK(i) (1<<((i)%BITS_OF_CHAR)) int PRF(_get)(unsigned char arr[], size_t i) { return ((LVAL(arr,i) & MASK(i)) ? 1 : 0); } void PRF(_set)(unsigned char arr[], size_t i, int val) { unsigned char mask = MASK(i); if (val) { LVAL(arr,i) |= mask; } else { LVAL(arr,i) &= ~mask; } return; } void PRF(_init)(unsigned char arr[], size_t sz, int val) { size_t bytesize = sz/BITS_OF_CHAR; size_t i; unsigned char valbyte = val ? (-1) : 0; for (i=0; i // FROM byterun/gc.h #define Caml_white (0 << 8) #define Caml_gray (1 << 8) #define Caml_blue (2 << 8) #define Caml_black (3 << 8) #define Colornum_hd(hd) ((color_t) (((hd) >> 8) & 3)) #define Coloredhd_hd(hd,colnum) (((hd) & ~Caml_black) | ((colnum) << 8)) #define Col_white (Caml_white >> 8) #define Col_gray (Caml_gray >> 8) #define Col_blue (Caml_blue >> 8) #define Col_black (Caml_black >> 8) #define COLORS_INIT_COUNT 256 //-------------------------------------------------------- // From byterun/memory.h: #define Not_in_heap 0 #define In_heap 1 #define In_young 2 #define In_static_data 4 #define In_code_area 8 #ifdef ARCH_SIXTYFOUR // 64 bits: Represent page table as a sparse hash table int caml_page_table_lookup(void * addr); #define Classify_addr(a) (caml_page_table_lookup((void *)(a))) #else // 32 bits: Represent page table as a 2-level array #define Pagetable2_log 11 #define Pagetable2_size (1 << Pagetable2_log) #define Pagetable1_log (Page_log + Pagetable2_log) #define Pagetable1_size (1 << (32 - Pagetable1_log)) CAMLextern unsigned char * caml_page_table[Pagetable1_size]; #define Pagetable_index1(a) (((uintnat)(a)) >> Pagetable1_log) #define Pagetable_index2(a) \ ((((uintnat)(a)) >> Page_log) & (Pagetable2_size - 1)) #define Classify_addr(a) \ caml_page_table[Pagetable_index1(a)][Pagetable_index2(a)] #endif #define Is_in_heap_or_young(a) (Classify_addr(a) & (In_heap | In_young)) //-------------------------------------------------------- unsigned char* colors = NULL; size_t colors_bitcap = 0; size_t colors_writeindex = 0; size_t colors_readindex = 0; void colors_init(void) { ASSERT(colors==NULL, "colors_init"); colors_bitcap = COLORS_INIT_COUNT*2; colors = bitarray_alloc(colors_bitcap); colors_writeindex = 0; colors_readindex = 0; return; } void colors_deinit(void) { bitarray_free(colors); colors = NULL; return; } void writebit(int bit) { if (colors_writeindex == colors_bitcap) { size_t colors_new_bitcap = colors_bitcap * 2; unsigned char* newarr = bitarray_realloc(colors, colors_new_bitcap); ASSERT(newarr != NULL, "realloc"); colors = newarr; colors_bitcap = colors_new_bitcap; }; ASSERT(colors_writeindex < colors_bitcap, "bound on write"); bitarray_set(colors, colors_writeindex++, bit); return; } int readbit(void) { int res; ASSERT(colors_readindex < colors_writeindex, "bound on read"); res = bitarray_get(colors, colors_readindex++); ASSERT(res == 0 || res == 1, "bitarray_get"); return res; } void writeint(unsigned int arg, unsigned int width) { while(width-- > 0) { writebit(arg&1); arg >>= 1; }; ASSERT(arg == 0, "writeint"); return; } unsigned int readint(unsigned int width) { unsigned int acc = 0; unsigned int hibit = 1 << (width-1); ASSERT(width > 0, "readint width"); while(width-- > 0) { int bit = readbit(); acc >>= 1; if (bit) acc |= hibit; }; return acc; } int prev_color = 0; int repeat_count = 0; #define BITS_FOR_COUNT 5 #define BITS_FOR_ORDER 4 #define MAX_REPEAT_COUNT (1<= MAX_REPEAT_COUNT) { unsigned int ord = 0; while(ord < MAX_REPEAT_ORDER-1 && (1< 0) { writeint(Col_blue, 2); writeint(0, 1); writeint(repeat_count, BITS_FOR_COUNT); repeat_count = 0; }; return; } void rle_write_flush(void) { if (repeat_count > 0) { rle_write_repeats(); }; ASSERT(repeat_count == 0, "rle_write_flush"); return; } void rle_read_flush(void) { DBG(printf("rle_read_flush: repeat_count=%i, ri=%i, wi=%i\n", repeat_count, colors_readindex, colors_writeindex) ); ASSERT ( repeat_count == 0 && colors_readindex == colors_writeindex , "rle_reader_flush" ); return; } void rle_write(int color) { if (prev_color == color) { ++repeat_count; } else { rle_write_flush(); ASSERT(color != Col_blue, "rle_write"); writeint(color, 2); prev_color = color; }; } int rle_read(void); int rle_read(void) { if (repeat_count > 0) { --repeat_count; return prev_color; } else { int c = readint(2); if (c == Col_blue) { int rk = readint(1); if (rk == 0) { repeat_count = readint(BITS_FOR_COUNT); } else { repeat_count = 1 << readint(BITS_FOR_ORDER); }; ASSERT(repeat_count > 0, "rle_read"); return rle_read(); } else { prev_color = c; return c; }; }; } void rle_init(void) { prev_color = 0; repeat_count = 0; return; } void writecolor(int col) { ASSERT(col >= 0 && col <= 3 && col != Col_blue, "writecolor"); rle_write(col); return; } int readcolor(void) { int res = rle_read(); ASSERT(res >= 0 && res <= 3 && res != Col_blue, "readcolor"); return res; } size_t acc_hdrs; size_t acc_data; size_t acc_depth; #define COND_BLOCK(q) \ ( Is_block(q) \ && (Is_in_heap_or_young(q)) \ ) #define GEN_COND_NOTVISITED(v, op) \ ( Colornum_hd(Hd_val(v)) op Col_blue ) #define ENTERING_COND_NOTVISITED(v) GEN_COND_NOTVISITED(v, != ) #define RESTORING_COND_NOTVISITED(v) GEN_COND_NOTVISITED(v, == ) #define REC_WALK(cond_notvisited, rec_call, rec_goto) \ size_t i; \ value prev_block; \ value f; \ prev_block = Val_unit; \ \ for (i=0; i acc_depth) { acc_depth = depth; }; hd = Hd_val(v); col = Colornum_hd(hd); writecolor(col); DBG(printf("COL: w %08lx %i\n", v, col)); Hd_val(v) = Coloredhd_hd(hd, Col_blue); if (Tag_val(v) < No_scan_tag) { REC_WALK ( ENTERING_COND_NOTVISITED , c_rec_objsize(prev_block, (depth+1)); , v = prev_block; \ depth = depth + 1; \ DBG(printf("goto, depth=%i, v=%p\n", depth, (void*)v)); \ goto rec_enter; ) }; /* (Tag_val(v) < No_scan_tag) */ return; } void restore_colors(value v) { int col; rec_restore: col = readcolor(); DBG(printf("COL: r %08lx %i\n", v, col)); Hd_val(v) = Coloredhd_hd(Hd_val(v), col); if (Tag_val(v) < No_scan_tag) { size_t sz = Wosize_val(v); REC_WALK ( RESTORING_COND_NOTVISITED , restore_colors(prev_block); , v = prev_block; \ goto rec_restore; ) }; return; } int c_objsize(value v, value scan, value reach, size_t* headers, size_t* data, size_t* depth) { value head; int reached = 0; colors_init(); rle_init(); /* DBG(printf("young heap from %p to %p\n", caml_young_start, caml_young_end)); DBG(printf("old heap from %p to %p\n", caml_heap_start, caml_heap_end)); */ DBG(printf("COL writing\n")); head = scan; while( COND_BLOCK(head) ) { value v = Field(head,0); header_t hd = Hd_val(v); int col = Colornum_hd(hd); head = Field(head,1); if( col == Col_blue ) continue; writecolor(col); Hd_val(v) = Coloredhd_hd(hd, Col_blue); } acc_data = 0; acc_hdrs = 0; acc_depth = 0; if ( COND_BLOCK(v) && Colornum_hd(Hd_val(v)) != Col_blue ) { c_rec_objsize(v, 0); }; if( headers != NULL ) { *headers = acc_hdrs; *data = acc_data; *depth = acc_depth; } rle_write_flush(); DBG(printf("COL reading\n")); rle_init(); head = scan; while( COND_BLOCK(head) ) { value v = Field(head,0); int col; head = Field(head,1); if( Colornum_hd(Hd_val(v)) != Col_blue ) continue; col = readcolor(); Hd_val(v) = Coloredhd_hd(Hd_val(v), col); } while( COND_BLOCK(reach) ) { value v = Field(reach,0); if( Colornum_hd(Hd_val(v)) == Col_blue ) { reached = 1; break; } reach = Field(reach,1); } if ( COND_BLOCK(v) && Colornum_hd(Hd_val(v)) == Col_blue ) { restore_colors(v); }; rle_read_flush(); #if DUMP printf("objsize: bytes for rle data = %i\n", colors_readindex/8); fflush(stdout); { FILE* f = fopen("colors-dump", "w"); fwrite(colors, 1, colors_readindex/8, f); fclose(f); }; #endif colors_deinit(); DBG(printf("c_objsize done.\n")); return reached; } #include value ml_objsize(value start,value scan,value reach) { CAMLparam2(start,scan); CAMLlocal1(res); size_t hdrs, data, depth; int reached = c_objsize(start, scan, reach, &hdrs, &data, &depth); res = caml_alloc_small(4, 0); Field(res, 0) = Val_int(data); Field(res, 1) = Val_int(hdrs); Field(res, 2) = Val_int(depth); Field(res, 3) = Val_bool(reached); CAMLreturn(res); } haxe_4.2.4.orig/libs/objsize/dune0000644000175000017500000000025014146064214016652 0ustar andyandy00000000000000(include_subdirs no) (library (name objsize) (c_names c_objsize) (c_flags (-I../../../../libs/objsize)) ; TODO: This is stupid (wrapped false) (modules objsize) )haxe_4.2.4.orig/libs/objsize/objsize.ml0000644000175000017500000000073214146064214020000 0ustar andyandy00000000000000if Sys.ocaml_version < "3.11" then failwith "Objsize >=0.12 can only be used with OCaml >=3.11" type info = { data : int ; headers : int ; depth : int ; reached : bool } external internal_objsize : Obj.t -> Obj.t list -> Obj.t list -> info = "ml_objsize" let objsize obj exclude reach = internal_objsize (Obj.repr obj) exclude reach let size_with_headers i = (Sys.word_size/8) * (i.data + i.headers) let size_without_headers i = (Sys.word_size/8) * i.data haxe_4.2.4.orig/libs/objsize/objsize.mli0000644000175000017500000000065314146064214020153 0ustar andyandy00000000000000(* Information gathered while walking through values. *) type info = { data : int ; headers : int ; depth : int ; reached : bool } (* Returns information for first argument, excluding the second arg list and telling if we can reach the third arg list *) val objsize : 'a -> Obj.t list -> Obj.t list -> info (* Calculates sizes in bytes: *) val size_with_headers : info -> int val size_without_headers : info -> int haxe_4.2.4.orig/libs/objsize/tests.ml0000644000175000017500000000204114146064214017470 0ustar andyandy00000000000000open Printf ;; let print title vl = let i = Objsize.objsize vl in printf "%S : data_words=%i headers=%i depth=%i\n \ bytes_without_headers=%i bytes_with_headers=%i\n%!" title i.Objsize.data i.Objsize.headers i.Objsize.depth (Objsize.size_without_headers i) (Objsize.size_with_headers i) in print "string of 13 chars" ("0123456" ^ "789012") ; print "some object" ( object method x = 123; method y = print_int; end ) ; print "some float" (Random.float 1.) ; (* let rec cyc = [1 :: [2 :: [3 :: cyc]]] in print "cyclic list" cyc ; *) let genlist n = let rec inner acc n = if n <= 0 then acc else inner (n :: acc) (n-1) in inner [] n in print "big list" (genlist 300000) ; print "big array" (Array.make 30000 true) ; print "statically created value" [1; 2; 3] ; print "objsize 0.14 bug" (let rec val_a = (val_z, val_z) and val_z = (123, val_y) and val_y = (234, 345) in val_a ) ; print "objsize 0.15 bug" (let val_z = ((), ()) in let val_y = (val_z, val_z, fun x -> x) in val_y ) ; haxe_4.2.4.orig/libs/objsize/util.h0000644000175000017500000000037614146064214017133 0ustar andyandy00000000000000#ifndef UTIL_H #define UTIL_H #define ABORT(x) do { \ fprintf(stderr, "aborted at %s:%i: %s\n", __FILE__, __LINE__, x); \ exit(1); } while(0) #define ASSERT(b, err) do { \ if (!(b)) \ { ABORT("assert_failed: " err); \ }; \ } while(0) #endif haxe_4.2.4.orig/libs/ocamake/ocamake.dsp0000644000175000017500000000340514146064214020044 0ustar andyandy00000000000000# Microsoft Developer Studio Project File - Name="ocamake" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) External Target" 0x0106 CFG=ocamake - Win32 Native code !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "ocamake.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "ocamake.mak" CFG="ocamake - Win32 Native code" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "ocamake - Win32 Native code" (based on "Win32 (x86) External Target") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "" # PROP BASE Intermediate_Dir "" # PROP BASE Cmd_Line "ocamake -opt ocamake.dsp -o ocamake.exe" # PROP BASE Rebuild_Opt "-all" # PROP BASE Target_File "ocamake_opt.exe" # PROP BASE Bsc_Name "" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "" # PROP Intermediate_Dir "" # PROP Cmd_Line "ocamake str.cmxa unix.cmxa -opt ocamake.dsp -o ocadbg.exe" # PROP Rebuild_Opt "-all" # PROP Target_File "ocadbg.exe" # PROP Bsc_Name "" # PROP Target_Dir "" # Begin Target # Name "ocamake - Win32 Native code" !IF "$(CFG)" == "ocamake - Win32 Native code" !ENDIF # Begin Group "ML Files" # PROP Default_Filter "ml;mly;mll" # Begin Source File SOURCE=.\ocamake.ml # End Source File # End Group # Begin Group "MLI Files" # PROP Default_Filter "mli" # End Group # End Target # End Project haxe_4.2.4.orig/libs/ocamake/ocamake.dsw0000644000175000017500000000077414146064214020061 0ustar andyandy00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "ocamake"=.\ocamake.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### haxe_4.2.4.orig/libs/ocamake/ocamake.html0000644000175000017500000001272214146064214020224 0ustar andyandy00000000000000
OCamake

OCamake - Copyright (c)2002-2003 Nicolas Cannasse & Motion Twin.
The last version of this software can be found at : http://tech.motion-twin.com

This software is provided "AS IS" without any warranty of any kind, merchantability or fitness for a particular purpose. You should use it at your own risks, as the author and his company won't be responsible for any problem that the usage of this software could raise.