Compare commits

...

46 Commits

Author SHA1 Message Date
David Given
bcc9e9d9a5 Bump the protocol number (I forgot last time I changed the protocol). 2020-01-10 21:04:33 +01:00
David Given
ec327e25a4 Merge pull request #121 from davidgiven/amiga
Add support for writing Amiga disks.
2019-12-14 21:55:00 +01:00
David Given
d0ed5b32f7 Add support for 528-byte sectors. Adjust the post-index gap to (try?) and fit
all the data in one revolution. I think my write clock is a bit slow.
2019-12-14 21:49:31 +01:00
David Given
7c66e1b0d4 Don't recalibrate after drive errors --- it's really annoying and I don't think it helps. 2019-12-14 21:43:48 +01:00
David Given
4475e9f085 Increase the default bit-error-threshold to 0.4, because that's the value I
almost always end up using.
2019-12-14 21:33:39 +01:00
David Given
5c9639ec5a Document the Amiga write support. 2019-12-14 21:15:47 +01:00
David Given
792cc88192 The Amiga writer now generates valid flux files --- but it looks like the
writer's broken (both the Amiga and the Brother have failed).
2019-12-14 20:44:48 +01:00
David Given
21fe586724 Update OSX build instructions. 2019-12-14 11:37:43 +01:00
David Given
5a0fb2761a Update OSX build instructions. 2019-12-14 11:37:43 +01:00
David Given
ef4581ed39 Merge from trunk. 2019-12-13 23:59:03 +01:00
David Given
73419704c2 Merge pull request #118 from davidgiven/fixing
Fix a few minor build tweaks.
2019-12-13 23:56:12 +01:00
David Given
a8b92d4780 This works; final tweaking. 2019-12-13 23:53:42 +01:00
David Given
98140b0646 More testing. 2019-12-13 23:50:33 +01:00
David Given
4429ce1f84 More build tweaks. 2019-12-13 23:48:17 +01:00
David Given
1f50941a2c Merge from trunk. 2019-12-13 23:45:17 +01:00
David Given
a7de04848c Merge pull request #117 from davidgiven/githubci
Convert to Github CI instead of Travis.
2019-12-13 23:43:03 +01:00
David Given
c264fec6e9 The Windows stuff doesn't work, so let's shelve it for now. 2019-12-13 23:38:49 +01:00
David Given
4488b2542f Update MSYS build environment. 2019-12-13 23:24:23 +01:00
David Given
2f1a5189d6 Oh, yeah, let's actually check out our project! 2019-12-13 23:21:58 +01:00
David Given
effaeff51e Something's not right --- test. 2019-12-13 23:19:48 +01:00
David Given
1210549f59 Try Windows builds on github. 2019-12-13 23:12:29 +01:00
David Given
7200de9702 Add more Homebrew packages. 2019-12-13 23:02:13 +01:00
David Given
5dd5c8516a Don't do builds on push_request, because these always coincide with pushes. 2019-12-13 23:01:08 +01:00
David Given
f7fb2a844b Github's OSX doesn't install pkg-config by default? 2019-12-13 23:00:10 +01:00
David Given
20b1b2a4a8 More YAML syntax fiddling? 2019-12-13 22:58:28 +01:00
David Given
f8b8bc2295 Fiddle with YAML syntax. 2019-12-13 22:57:29 +01:00
David Given
2d4d56d09f Try Github CI for OSX builds instead of Travis. 2019-12-13 22:55:37 +01:00
David Given
39599b76c8 Stop building the Ubuntu version with Travis. 2019-12-13 22:52:30 +01:00
David Given
c2c40ccfbb Also remember to install ninja-build. 2019-12-13 22:48:48 +01:00
David Given
ab42eb23f4 Remember to run apt as sudo. 2019-12-13 22:47:20 +01:00
David Given
05eff0e528 Try to build using github CI. 2019-12-13 22:44:58 +01:00
David Given
23311b4b68 Start looking at Github CI. 2019-12-13 22:41:19 +01:00
David Given
5e97df8d15 Better diagnostics when a package can't be found. 2019-12-13 22:39:58 +01:00
David Given
898e8c551c Produce a build-time error if the pkg-config packages aren't available. 2019-12-13 22:34:24 +01:00
David Given
ad69c6bd27 Fix stupid (but thankfully harmless) typo. 2019-12-13 22:33:39 +01:00
David Given
661399cc83 Update document with the new flippy mod doc; explain how Mac disks are broken. 2019-12-12 21:04:42 +01:00
David Given
edbb4b1daa Merge pull request #115 from davidgiven/reading
Rewrite the entire sampler.
2019-12-12 20:46:12 +01:00
David Given
6389e8a756 Update pin number (which was wrong). 2019-12-12 20:35:20 +01:00
David Given
c187b79d80 Add a 300RPM clock on 3[0] and a 360RPM clock on 3[1], for use with faking
index pulses to the drive.
2019-12-12 20:34:44 +01:00
David Given
edbe624c5a Hopefully, finally, fix the hang-on-read issue. 2019-12-12 20:09:49 +01:00
David Given
44e2334815 Typo fix. Make sure that both drives get deselected when the motor stops (to
make the LEDs go out).
2019-12-12 00:17:59 +01:00
David Given
b448ab7917 Finally squeeze everything in to the Verilog sampler. It does seem to work
better... the the USB hangup problem persists. Mac disks are still
nigh-unreadable.
2019-12-12 00:12:20 +01:00
David Given
072a097003 Archival (non-functioning) checkin of Verilog-based sampler code. Sadly, we've
run into size limits for the device, and I need to slim down.
2019-12-11 22:51:27 +01:00
David Given
a66e704bab Start ripping out the awful UDB-based sampler code, replacing it with a Verilog
one and a standalone FIFO. This gets the FIFO working.
2019-12-11 21:13:57 +01:00
David Given
d2f8c27cb6 Add checksum routine. 2019-12-01 09:11:36 +01:00
David Given
eaa3c57425 Non-functional boilerplate of Amiga write support. 2019-12-01 09:07:43 +01:00
41 changed files with 1918 additions and 481 deletions

34
.github/workflows/ccpp.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: C/C++ CI
on: [push]
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: apt
run: sudo apt install libusb-1.0-0-dev libsqlite3-dev ninja-build
- name: make
run: make
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- name: brew
run: brew install sqlite pkg-config libusb ninja
- name: make
run: make
# build-windows:
# runs-on: windows-latest
# steps:
# - uses: numworks/setup-msys2@v1
# with:
# msystem: MSYS
# - uses: actions/checkout@v1
# - name: pacman
# run: msys2do pacman -S --noconfirm --needed make ninja mingw-w64-i686-libusb mingw-w64-i686-sqlite3 mingw-w64-i686-zlib mingw-w64-i686-gcc zip
# - name: make
# run: msys2do make

View File

@@ -1,39 +0,0 @@
language: shell
git:
depth: 1
matrix:
include:
-
os: linux
sudo: false
dist: xenial
compiler: gcc
env: CXX=g++-8
script:
- make
-
os: osx
osx_image: xcode10.2
compiler: clang
env:
- HOMEBREW_NO_INSTALL_CLEANUP=1
addons:
apt:
sources:
- llvm-toolchain-precise-3.8
- ubuntu-toolchain-r-test
packages:
- ninja-build
- libusb-1.0-0-dev
- libsqlite3-dev
- g++-8
homebrew:
packages:
- ninja
script:
- make

View File

@@ -1,244 +1,244 @@
:400000000080002011000000F50F0000F50F0000064A08B5136843F020031360044B1A6803F53F5302331A6001F002F8E8460040FA46004010B5054C237833B9044B13B123
:400040000448AFF300800123237010BD6081FF1F0000000068380000084B10B51BB108490848AFF300800848036803B910BD074B002BFBD0BDE81040184700BF00000000A9
:400080006481FF1F68380000C880FF1F0000000072B6034A13680133136062B6704700BF8081FF1F0A4A0B4B516801310B40002BBEBF03F1FF3363F00F0301335360516840
:4000C0009368994202BF024B01221A73704700BF8081FF1F0F0000800A4A0B4B916801310B40002BBEBF03F1FF3363F00F030133936091685368994202BF024B01221A7381
:40010000704700BF8081FF1F0F000080024B012200205A7302F062B98081FF1F10B5C4B2204601F047F90128FAD110BD10B50446094B9A7B987382421CBF0022DA7310F0EE
:40014000010F14BF0220012002F07AFE6008BDE8104002F06FBE00BF8081FF1F70B5C4B220460E4601F02EF9314605460246204601F0EAF9204601F01DF90128FAD0284616
:4001800070BD000038B5094C257C3DB9012002F08BF84FF47A7002F0D3FAE5732368636101232374BDE8384002F008BB8081FF1F38B50446C5B2284602F082F8062002F0C4
:4001C000D5FA44F00200C0B202F07AF8062002F0CDFA284602F074F8BDE83840062002F0AFBA10B5642402F065F820B10120BDE81040FFF7DDBF0120FFF7DAFF013CF2D1D6
:40020000F4E7000038B5044D0024285D013402F05DFA102CF9D138BD9881FF1F08B502F077FC002002F080FC02F092FC02F09CFC80B208BD10B50446012002F05BF86420A2
:4002400002F07EFAFFF7EAFF2080002002F052F8642002F075FAFFF7E1FF608010BD08B502F082FD002002F08BFD02F09DFD02F0A7FD80B208BD10B50446FFF7B2FF3220E8
:4002800002F05EFAFFF7EBFF20800020FFF790FF322002F055FAFFF7E2FF608010BD0FB400B593B014AB53F8042B402102A8019302F0C2FE02A802F09EF802F0A8F813B0EC
:4002C0005DF804EB04B0704710B5044601780648FFF7E5FF0420FFF721FF62782146BDE81040042001F0BEB87A38000007B50023ADF804308DF80600032301A88DF8053026
:40030000FFF7E2FF03B05DF804FB0000F8B51D4C0646FFF737FFE37B03B156B91A48FFF7BEFFFFF75EFF01200023E073A36202F01DFA3246A16A1548FFF7B1FF114D002718
:40034000A36A9E4216D001F0B5FF00B1AF62A36A9E4205DD0020FFF72BFFAB6A013305E005DA0120FFF724FFAB6A013BAB6202F025FAE5E7322002F0E3F9BDE8F840044869
:40038000FFF78DBF8081FF1F873800008E380000AB3800002DE9F04F9BB062B602F078FAAB49042002F09CFAAA4801F08FFFAA4801F0C2FFA94801F0F3FF02F049FC02F0A6
:4003C0001BFB002002F03CFD02F014F80221002000F0A6FFA24D0321084602F0CFF92E462C4602F0EBF92B7C5BB16A692B689B1A41F28832934204D9002001F055FF0023FA
:400400002B7400F0C5FF18B99648FFF748FF04E000F0C4FF0028F7D109E000F0B9FF0028FBD09148FFF73BFF032001F0E1F8032000F0C0FF0128D4D1A07BFFF777FE8B4982
:400440000320FFF78BFE94F82C108948FFF727FF94F82C30023B122B00F2E383DFE813F01300E1031C00E1032200E1033A00E1035E00E1039A01E1032503E1034403E1038E
:400480004A03E103560303238DF828308DF8293008238DF82A3035E394F82E00FFF736FF744B2CE3FFF76EFE00236373637B002BFCD0002373733268637B002BFCD03368B9
:4004C00007218DF828109B1A04218DF82910ADF82A3017E30220FFF721FE4FF000090DF1280A4FF480780027C8EB0903DA1907F80A200137402FF9D10220FFF70FFE3A4684
:400500005146022000F0AEFFB8F10108EBD109F10109B9F1400FE4D1574BC1E294F82E0001F0E8FEA06AFFF7F1FE012001F05CFF02F0EEFC514BDFF848811A78002742F010
:4005400004021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F0DCFC0220FFF7DBFD41F6FF734FF480420121022001F0C5FE84F86C0002F08DF808F8BF
:4005800007000137102FF8D1DFF8F8A000270AF159081FFA88F90137102F14BF3A4600221AF8010F22440623127E402102F0A8F84A4646F249519AF8000002F0B3F809F1BD
:4005C0004009102F1FFA89F9E5D100237373637B002BFCD00027142239460AA87773DFF8A89002F0F5FC40230D9338464FF0FF337760CDF83090B360377301F0F5FE736810
:4006000096F86C003344197E01F0FEFF96F86C0001F0BCFF012196F86C0001F08FFF636813B96B7B002BFAD0002794F82FA0A76094F80CB0BBF1000F69D102F0BFF86B7BBC
:400640003BB3BAF1010A85F80DB022D15FE000BF910000000D010000A5000000D90000008081FF1FB9380000CC380000AC81FF1FD63800006C3800006E3800009965004099
:400680009881FF1F9781FF1FF085FF1F2B7B002B3DD1A26863689A42F8D04FF0000BA3680AA808EB83135B440A93CBF140030B9300F0D6FA0B9B0137C3F140039B440D9B5D
:4006C0005FFA8BFB9BB9022000F074FE012805D0637BE3B92B7B002BF5D018E04022B949022000F0BFFE4023CDF830900D93BBF13F0FD4D9A268B44B01321340002BBEBFA4
:4007000003F1FF3363F00F030133A36090E7042194F86C0001F084FF94F86C0001F090FF0028F9D10AA800F0CFFA0220FFF7F6FCDDF83480B8F1400F06D0C8F1400292B27A
:40074000A049022000F08EFE0D9A32F0400203D11146022000F086FE0220FFF7DFFCFFF751FD237B33B19948FFF799FD0220FFF7BDFD06E0964B09A81B88ADF82430FFF724
:40078000A3FD627B3946237B9248CDF80080FFF786FD49E29048FFF782FD276B17F03F0701D003203EE2012001F0D8FD95F82E0001F0A0FD02F0ACFB884BDFF824821A78F1
:4007C00002F0FB021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F09BFBA86AFFF792FD01214FF4804341F6FF72084601F0B8FD85F86C0001F04CFF0B
:4008000008F807000137102FF8D1DFF8D891002709F159031FFA83F807930137102F14BF3A46002219F8010F22440523127E402101F066FF414646F2484299F8000001F0D9
:4008400071FF08F14008102F1FFA88F8E5D10027BB46B946BA46336B4FF0FF389B09142239460AA877600593C6F80880377302F0AFFB402301200D9300F0BAFECDF81880CF
:4000000000800020110000003510000035100000064A08B5136843F020031360044B1A6803F53F5302331A6001F022F8E8460040FA46004010B5054C237833B9044B13B181
:400040000448AFF300800123237010BD6881FF1F0000000098380000084B10B51BB108490848AFF300800848036803B910BD074B002BFBD0BDE81040184700BF0000000071
:400080006C81FF1F98380000C880FF1F0000000072B6034A13680133136062B6704700BF8881FF1F0A4A0B4B516801310B40002BBEBF03F1FF3363F00F0301335360516800
:4000C0009368994202BF024B01221A73704700BF8881FF1F0F0000800A4A0B4B916801310B40002BBEBF03F1FF3363F00F030133936091685368994202BF024B01221A7379
:40010000704700BF8881FF1F0F000080024B012200205A7302F052B98881FF1F10B5C4B2204601F067F90128FAD110BD10B50446094B9A7B987382421CBF0022DA7310F0CE
:40014000010F14BF0220012002F064FE6008BDE8104002F059BE00BF8881FF1F70B5C4B220460E4601F04EF9314605460246204601F00AFA204601F03DF90128FAD02846D9
:4001800070BD000038B50B4C257C55B9A07BFFF7CDFF012002F0A8F84FF47A7002F0BAFAE5732368636101232374BDE8384002F0EFBA00BF8881FF1F38B50446C5B22846A0
:4001C00002F09EF8062002F0BBFA44F00200C0B202F096F8062002F0B3FA284602F090F8BDE83840062002F095BA10B5642402F081F820B10120BDE81040FFF7DDBF0120FF
:40020000FFF7DAFF013CF2D1F4E7000038B5044D0024285D013402F043FA102CF9D138BDA081FF1F08B502F05DFC002002F066FC02F078FC02F082FC80B208BD10B5044637
:40024000012002F075F8642002F064FAFFF7EAFF2080002002F06CF8642002F05BFAFFF7E1FF608010BD08B502F068FD002002F071FD02F083FD02F08DFD80B208BD10B5A9
:400280000446FFF7B2FF322002F044FAFFF7EBFF20800020FFF790FF322002F03BFAFFF7E2FF608010BD0FB400B593B014AB53F8042B402102A8019302F0D6FE02A802F0B4
:4002C00084F802F08EF813B05DF804EB04B0704710B5044601780648FFF7E5FF0420FFF71DFF62782146BDE81040042001F0DAB8AA38000007B50023ADF804308DF80600B0
:40030000032301A88DF80530FFF7E2FF03B05DF804FB0000F8B51D4C0646FFF733FFE37B03B156B91A48FFF7BEFFFFF75EFF01200023E073A36202F003FA3246A16A1548D8
:40034000FFF7B1FF114D0027A36A9E4216D001F0D1FF00B1AF62A36A9E4205DD0020FFF72BFFAB6A013305E005DA0120FFF724FFAB6A013BAB6202F00BFAE5E7322002F041
:40038000C9F9BDE8F8400448FFF78DBF8881FF1FB7380000BE380000DB3800002DE9F04F9BB062B602F05EFABE49042002F082FABD4801F0ABFFBD4802F04EFDBC4801F07F
:4003C000DFFF02F02FFC02F001FB002002F022FD01F0FAFF0221002000F0C2FFB54D0321084602F0B5F92E462C4602F0D1F92B7C73B16A692B689B1A41F28832934207D9C7
:40040000002001F071FF002002F004FD00232B7400F0DEFF18B9A848FFF745FF04E000F0DDFF0028F7D109E000F0D2FF0028FBD0A248FFF738FF032001F0FAF8032000F031
:40044000D9FF0128D1D1A07BFFF770FE9C490320FFF784FE94F82C109A48FFF724FF94F82C30023B122B00F2DF83DFE813F01300DD031C00DD032200DD033A00DD035E002E
:40048000DD039301DD031E03DD033D03DD034303DD034F0303238DF828308DF8293009238DF82A302EE394F82E00FFF733FF864B25E3FFF767FE00236373637B002BFCD06E
:4004C000002373733268637B002BFCD0336807218DF828109B1A04218DF82910ADF82A3010E30220FFF71AFE4FF000090DF1280A4FF480780027C8EB0903DA1907F80A2095
:400500000137402FF9D10220FFF708FE3A465146022000F0C7FFB8F10108EBD109F10109B9F1400FE4D1694BBAE294F82E0001F0FFFEA06AFFF7EEFE02F002FD644BDFF8C2
:4005400094811A78002742F004021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F0F0FC0220FFF7D7FD41F6FF734FF480420121022002F051FC84F807
:400580006C0002F073F808F807000137102FF8D1DFF844A100270AF159081FFA88F90137102F14BF3A4600221AF8010F22440623127E402102F08EF84A4646F24F419AF862
:4005C000000002F099F809F14009102F1FFA89F9E5D100237373637B002BFCD00027142239460AA8777302F00BFD40230D934FF0FF337760B36037737368DFF8E0903344B4
:40060000197E96F86C00CDF8309001F0E7FF96F86C0001F0A5FF012196F86C0001F078FF636813B96B7B002BFAD0002794F82FA0A76094F80CB0BBF1000F6AD102F0A8F8EF
:400640006B7B43B1BAF1010A85F80DB003D160E02B7B002B5DD1A26863689A42F8D04FF0000BA3680AA808EB83135B440A93CBF140030B9300F0F8FA0B9B0137C3F1400304
:400680009B440D9B5FFA8BFB9BBB022000F0B2FE012825D0637B002B3BD12B7B002BF4D037E000BF910000000D010000A5000000D90000008881FF1FE9380000FC38000085
:4006C000B481FF1F063900009C3800009E3800009F640040A081FF1F9F81FF1FF885FF1F4022B849022000F0DDFE4023CDF830900D93BBF13F0FB4D9A268B34B0132134076
:40070000002BBEBF03F1FF3363F00F030133A3608FE7042194F86C0001F06CFF94F86C0001F078FF0028F9D10AA800F0D1FA0220FFF7F4FC337B63B90D9A402A06D0C2F135
:40074000400292B29F49022000F0ACFE0220FFF7E5FC0D9A32F0400203D11146022000F0A1FEFFF753FD237B33B19848FFF79BFD0220FFF7BFFD06E0954B09A81B88ADF8A6
:400780002430FFF7A5FD627B3946237B9148FFF78AFD4CE29048FFF786FD276B17F03F0701D0032041E2012001F0C8FD95F82E0001F0BEFD02F0C4FB884BDFF824821A78B7
:4007C00002F0FB021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F0B3FBA86AFFF796FD01214FF4804341F6FF72084601F0A8FD85F86C0001F036FF15
:4008000008F807000137102FF8D1DFF8D891002709F159031FFA83F807930137102F14BF3A46002219F8010F22440523127E402101F050FF414646F24B5299F8000001F0DC
:400840005BFF08F14008102F1FFA88F8E5D10027BB46B946BA46336B4FF0FF389B09142239460AA877600593C6F80880377302F0C7FB402301200D9300F0DAFECDF81880AD
:400880006268514B01321340002BBCBF03F1FF3363F00F03A168B8BF01338B4200F0A480BAF1000F07D0237B002B40F0B0806B7B002B40F0AC800B9B002B34D1B9F1000FD0
:4008C0000BD07F223F495A540133402BFAD10A910B9328E0BAF1000F06D1012000F06AFD01288046F6D107E0237B002B40F08F806B7B002BF1D08AE03249FFF72FFC81464E
:40090000304B0B9040460A9300F072FEB9F13F0F07F1010706DD059BDB1BD3F1000949EB030900E0C1460B9BDBB16368079A0AA802EB83120D9BC3F1400313440C9300F062
:40094000D2F90D9B6BB96A681F4B01321340002BBEBF03F1FF3363F00F030133636040230D93A36801333FD16B680F2B3CD14FF00008C5F8088001F025FD85F80C80AB68CD
:4009800095F86C002B44197E01F03EFE95F86C0001F0FCFD012195F86C0001F0CFFD85F80D80637B002BFCD04FF00008012086F80D8001F013FD404601F0D0FCCDF818805D
:4009C00015E000BFF085FF1F0F000080E538000070380000FF38000018390000986400409881FF1F9781FF1FBAF1000F05D0237B6BB96B7B5BB94FF0010AA368069A934216
:400A00003FF43EAFAB680BF1010B069338E701F0DFFC012001F0A2FC002001F0DFFC042194F86C0001F0FCFD94F86C0001F008FE0028F9D196F86C0001F096FD737B327B5A
:400A40000293012303920193CDF800905B463A4605997948FFF723FCB9F1000F16D1059BBB420ADD012000F0A5FC01288046F6D17249FFF773FB3F2803DC012000F0CCFDDF
:400A800004E0404600F0B4FD0137E8E7FFF7BAFB6B48FFF704FC237B0BB10220C2E0694B1B8809A8ADF824302DE094F82E0001F021FCA06AFFF72AFC6348FFF7F0FB002307
:400AC0006373637B002BFCD0012001F087FC00237373637B002BFCD0002001F07FFC5B48FFF7DDFB5A4B0AE00020E073FFF70EFC584B04E094F82E00FFF718FB564B1B884B
:400B0000ADF828300AA8FFF7DFFB8DE0237C23B1002001F0C9FB00232B7402F017F9002002F0BAF82A2701F0E5FF002001F088FF3A4600210AA802F04BFA15238DF828309C
:400B40008DF8297001F03AFE002001F0ADFB002002F076F9C82001F0F3FD0DEB0700FFF769FB0DF13E00FFF786FB01F027FE012002F066F9322001F0E3FD0DF12E00FFF752
:400B800059FB0DF14200FFF776FB012001F08CFB4FF4967001F0D4FD01F010FE0DF13600FFF748FB0DF14A00FFF765FB002001F07BFB4FF4967001F0C3FD01F0FFFD0220FC
:400BC00002F03EF9322001F0BBFD0DF13200FFF731FB0DF14600FFF74EFB012001F064FB4FF4967001F0ACFD01F0E8FD0DF13A00FFF720FB0DF14E00FFF73DFB002001F0FE
:400C000053FB4FF4967001F09BFD01F0D7FD002002F016F90023E37302F01AF801F0ECFE70E70120FFF762FB032000F0E1FC0B48FFF735FBFFF7D5BB22390000F085FF1FAE
:400C40005239000072380000613900006F3900007438000076380000783800007C39000010B54268002A2ED0C368002B2BD00368048A591C01601B78013A13F0800F817C2A
:400C800042601DBF03F0010242EA84030231083114BF43F0020343EA0423817414BF03820382837C072BDCD9028A083B42FA03F38268511C81601370C368013BC360837C45
:400CC000083B8374CDE710BD07B5827C42B102AA002102F8011D026001224260FFF7C0FF03B05DF804FB30B543686BB3C2685AB3827C072A0CD8046890F91050611C016099
:400D00002178013B41EA05210832018243608274827C018AA2F108042141CBB2090608D5C3F3801363F07F03023A03F08103827402E08474002BD7D08268511C8160137016
:400D4000C368013BC360CFE730BD00002DE9F04172B6844B61221A70A3F5F06301221A801924814A9C7092E803008033062283F8002283E80300522203F580731A707B4B2D
:400D80007B4A1B787B4EDBB2137040F618027A4B00251A8041F2512223F8022C33784FF4F07003F0010343EA450502F0A9F8013C05F003052ED0032DF0D1704B4FF48072D7
:400DC0001A8007221A706E4A002548211570917002221D705D7103F8032C0422DA71694A694C1378694E43F00103137012F8013C062743F0030302F8013C2378012243F087
:400E000080032370574B1A70614A137843F02003137000E0FEE707FB056300219A881868013502F0D5F8072DF5D15A485A4E002550F8041F05F1105303F14E0221F0FF07F2
:400E40004F33C9B20B4452005B0002329A4206D012F802EC12F801CC0EF807C0F5E7B0420D44E5D14D4A002313609360136193614B4B4C4F1A684C4BDFF874811A604B4B74
:400E80001A684B4B1A604B4A137843F002031370137C43F0020313742378A2F5863243F040032370413A137843F010031370424A424B07CA03C31A80414A2833106843F8D2
:400EC000250C127903F8212C3E4A07CA03C31A803D4AE83B07CA03C31A803C4A083307CA03C31A803A4A0420137843F008031370384B02F5AA521B783D78DBB298F8006039
:400F0000EDB203F007010C321B091170F6B2537045F003033B7046F0030388F800302E4B48221A702D4A402313702D49937013729372082382F81F3220220A7048710A7243
:400F4000284A0A20137001F011FC274B88F8006044223D70254D1A7094E80F0007C52B80BDE8F08100480040900C00480F010049A146004025420040224200400440004020
:400F800006400040A2430040A043004081390000E8460040FCFFFF479800004800760040980C0048F8460040207600409C0C00482876004003500140580C0048C0510040C5
:400FC000640C00486C0C0048780C0048840C004822430040CF0100491D51004001590040235B0040585B004076580040B0430040F946004008B501F0BFFF03680C2B00D17F
:40100000FEE7FEE7084908B50B68084A1844821A802A01DC086005E001F0AEFF0C2303604FF0FF33184608BDCC80FF1F4087FF1F80B51148114B0025C0B1A3F1100192C9B4
:4010400022460439161BB74204D051F8046F42F8046BF7E7114653F8046C8C1AA64202D041F8045BF9E701381033E5E701F08AFFFFF790F9FEE700BF01000000503B00002F
:40108000124A134B10B51A60124A134C1368134843F4007313600023032B98BF54F823204FEA830188BF0E4A0133302B4250F3D10C4B1A780C4B1A700C4B084A1A60FFF72E
:4010C00045FEBDE8104001F023BA00BF0004FA050CED00E014ED00E0000000000080FF1FF50F0000BC760040C080FF1F08ED00E0F8B501F00DFF4B4A01271378022643F0DA
:4011000001031370137C484C43F001031374474B02F5E3521F700B3203F8946C1378054603F07F031370002001F020FB2378404A03F0F90323701378384603F0DF031370C0
:4011400023783B43237001F011FB282001F00EFB384B30461A7802F07F021A701A7802F0BF021A7023783343237001F0FFFA2378314A43F0040323700023137053702F4ADA
:40118000FF2199540133092BFBD1284601F0C4FE0721172001F032FB2949172001F020FB0721182001F02AFB2649182001F018FB0721152001F022FB2349152001F010FB72
:4011C0000721052001F01AFB2049052001F008FB0721062001F012FB1D49062001F000FB0721084601F00AFB1A49072001F0F8FA0721082001F002FB1749082001F0F0FADC
:401200000021162001F0FAFA1449162001F0E8FA07210C2001F0F2FABDE8F84010490C2001F0DEBAA5430040944300409D60004012600040F8510040846000406586FF1F0C
:40124000BF1A0000F9180000BD1A0000F11900001D1A00004D1A0000851A0000C51A0000391B0000214B224A10B5187000231370204A40201370204A0F2413701F4A13700F
:401280001F4A13701F4A13701F4A13701F4B4FF400021A604FF080721A604FF400121A6020221A601860802018604FF480701860174804704FF480001860164B1A70933B09
:4012C00019B91A7802F0FE0202E01A7842F001021A70114B03221A70802203F8202C012001F00EFE0D4B04221A7010BD8086FF1F8686FF1F8486FF1F8586FF1F8186FF1FBA
:401300007086FF1F8386FF1FF886FF1F00E100E09E6000409C600040286000401260004070B5074C054623780E461BB9FFF7E0FE0123237031462846BDE87040FFF792BF8F
:401340003086FF1F0A4A002313700A4A13700A4A13700A4A13700A4A13700A4A13700A4A13700A4B03221A70802203F8202C70478686FF1F8486FF1F8586FF1F8186FF1F51
:401380007086FF1F8386FF1FF886FF1F28600040014B1878704700BF8586FF1F044B1A7802F0FF001AB118780022C0B21A7070478486FF1F024A0C2303FB002040787047E1
:4013C0008C86FF1F431E072B0CD8074A064B00010344805C5B7800F00F0043EA0020023880B2704700207047FC5F00401A4A38B50C2303FB00231B79090C13F0800F00F1FF
:40140000FF35044619BF8AB24FF480438BB24FF48042032D18D8DFE805F002070C110021084601F051F80DE00021084601F030F808E00021084601F00FF803E00021084611
:4014400000F0EEFF054B1855EDB2072D03D801F023F9034B185538BD8C86FF1F5C86FF1F6586FF1F431E072B2DE9F0470446894615465CD82F4F0C2202FB0072D388DFF859
:40148000B8A09BB2C3F500739D424FF00C0303FB007388BFD588DB7884BFC5F50075ADB2254A43EA15230601B354B244EBB28AF80130224B1A5C9846FF2A01D1FFF796FF87
:4014C0000C2303FB047200215170B9F1000F28D03DB31B4F385D01F047F811232946FE2218F8040001F00CF906F5C04278321FFA89F118F8040001F015F9124D18F80410FA
:40150000385D01F081F80121385D01F017F8735D43F002037355735D03F0FD037355BDE8F08703FB04746379DBB28AF80230BDE8F08700BF8C86FF1FFC5F00406586FF1F3C
:401540005C86FF1F706000402DE9F047044615468846002940D0431E072B3FD8FFF732FFA84203D22046FFF72DFF05461D4E335DFF2B03D141462046FFF738FFDFF868A00D
:4015800027011AF8040000F0EFFF1223FE222946305D01F0B5F807F5C0411FFA88F27831305D01F0BFF8DFF84490315D1AF8040001F02AF801211AF8040000F0BFFF17F85B
:4015C000093043F0020307F8093017F8093003F0FD0307F8093002E00D4600E000252846BDE8F0876586FF1F5C86FF1F70600040431E072B0AD8064A0C2303FB00230022BB
:401600005A705A79034BD2B200011A54704700BF8C86FF1FFE5F0040431E072B9FBF024B000108221A547047FE5F004030B51A4A1A491B4D0878138803449BB21380194AA5
:4016400000231488D8B2A4B27CB1082B0CD050680078C0B2E85450680133013050601088013880B21080ECE718460B780E4C082B0E4A00D040B10E4D2B7883F080032B7068
:401680000F232370022301E0022323701370094B1870087030BD00BFFC86FF1FF886FF1F006000407486FF1F7186FF1F8686FF1F8286FF1FF986FF1F074B02221A70074BDC
:4016C00080221A70064B0F221A70064A00231370054A0120137070478686FF1F8286FF1F7186FF1FF886FF1FF986FF1F30B5164B16491B780A8803F00F03023BDBB21A447D
:4017000092B20A80124C134A0020118889B279B173B15568215C013BC9B229705168DBB20131516011880130013989B21180ECE7094A1370094A137883F080031370084B08
:401740000B221A7030BD00BF29600040FC86FF1F006000407486FF1FF986FF1F8286FF1F7186FF1F064A06231370064A01201370054B80221A70054B00221A70704700BF2F
:401780008686FF1F7186FF1F8286FF1FF986FF1F054B9A683AB19A68044910709A680988518000229A6070477486FF1FFC86FF1F08B5124B1A78D2B21A701B78DBB21A0632
:4017C00002D50F4A137008BD0220FFF7E1FF0D4B1B7803F06003202B05D0402B06D043B900F012FC04E001F09BFB01E000F046FD10B9034B03221A7008BD00BF286000404C
:401800007186FF1F0060004008B5084A084B0120197813880B449BB21380064B00221A70FFF7B6FF044B03221A7008BDFC86FF1FF886FF1F8686FF1F7186FF1F08B50C4B1B
:401840001B78DBB2042B07D0062B09D0022B0DD1BDE80840FFF7D8BFBDE80840FFF746BF0320FFF795FF034B03221A7008BD00BF8686FF1F7186FF1F08B5054B002201200E
:401880001A70FFF785FF034B03221A7008BD00BF8686FF1F7186FF1F08B50A4B1A7832B11A78094942F080020A7000221A70074B002201201A70FFF76BFF054B03221A70A1
:4018C00008BD00BF7086FF1F086000408686FF1F7186FF1F074B1B78DBB2042B05D0062B05D0022B05D1FFF7A1BEFFF7C5BFFFF7D3BF70478686FF1F38B51D4C2378DBB234
:40190000DD0634D518060AD503F00F03012B2ED1FFF74EFF174B1B78190609D538BD5A0602D5FFF7D7FF03E09D0620D5FFF786FF23781B061BD4104B1A78104B1B7813438F
:401940000F4A13701278934211D10A4A0849154613782078DBB2000605D41378DBB20B700B7803F00F0328788342F1D138BD38BD286000407186FF1F8286FF1FF986FF1FEF
:4019800029600040054A00231380054A916819B191680B7092685380704700BFFC86FF1F7486FF1F0E4808B503889BB213B9FFF783FE13E00B4B02221A700B4B00221A70B1
:4019C000FFF7E0FF094AD1799379028843EA012392B2934238BF0380FFF728FE012008BD7486FF1F8686FF1F8286FF1F00600040084B01221A700F3B9B7C074B1A7B02F0B7
:401A00000302012A1EBFDA7B82F08002DA7301225A7370470B6000408C86FF1F094B02221A700F3B93F82230074B1A7E02F00302012A1EBFDA7E82F08002DA7601225A76E0
:401A4000704700BF0B6000408C86FF1F0B4B04221A700F3B93F83230094B93F8242002F00302012A1EBF93F8272082F0800283F82720012283F82520704700BF0B6000402A
:401A80008C86FF1F0B4B08221A700F3B93F84230094B93F8302002F00302012A1EBF93F8332082F0800283F83320012283F83120704700BF0B6000408C86FF1F7047FFF7EA
:401AC00041BC0000F0B5184B184E19780C27C9B201234FF0000C31B3CA0720D5144A4FEA031E7244947850782040C5070DD507FB03652C79240608D5147804F0FE041470B7
:401B00006D790C4CEDB204F80E50840706D507FB036425792D0658BF84F801C090700133DBB24908D7E7F0BD9F6000408C86FF1F70600040FE5F004000F0E2BC70B50446E4
:401B4000184B88B003AA03F11006154618685968083303C5B3422A46F7D11B782B70FCB12223237001AD03232846637000F0C0FE002220461146AB5C08AC04EB131414F815
:401B8000144C03F00F03847008AC234413F8143C0132082AC1700371417100F10400EAD108B070BDAB3900002DE9F0431C4D01222E460C201F274FF0800E4FF0080C194BE2
:401BC00000FB02581401234418705F70164998F805902144B9F1000F07D098F8044024064CBF887081F802C001E081F802E000FB0261CC880132E4B29C71CC88092AC4F306
:401C00000724DC71CC88E4B21C71C988C1F307215971D4D1054BFF221A70BDE8F08300BF8C86FF1F70600040FC5F00400A600040064B074A1B7802EBC30253681A7C8242C6
:401C400086BF03EBC0035869002070478086FF1F0C3A00002DE9F84F424B1A78002A7ED01878414D0138C0B2FFF7E2FFA8463F4AC3681478007ADFF800C1E4B203EBC00054
:401C80000C2600274FF0010E834268D01A78A24263D11CF80420597891425ED19A7893F8039002F07F0206FB02FA05EB0A01CF7093F802B009F0030981F804B093F803B044
:401CC00005F80AB0B3F804A0A1F808A093F902A0BAF1000F0BDAB9F1010F0CBF4FF007094FF00D0981F8059081F801E009E0B9F1010F0CBF4FF005094FF0090981F8059025
:401D00004F704FEA02191A4906FB0282494481F802E0B2F808A0CAF3072A81F800A0B2F808A05FFA8AFA81F801A0B2F806A011495FFA8AFA494481F806A0B2F80690C9F3EF
:401D4000072981F80790B2F806905FFA89F981F80490D288C2F307224A71083394E7BDE8F88F00BF8586FF1F8C86FF1F8186FF1FFC5F0040706000407286FF1F08B5064B1A
:401D800018780138C0B2FFF753FF20B143681B7900EBC300406908BD8586FF1F00212DE9F84F0B464E4E0C2707FB01F401313219092933554FF000059370494CD3701381CC
:401DC000937253705371EFD118B1464B1D70464B1D70464B1A78002A7FD0187801250138C0B2FFF725FFA8464368DFF8F8E0DB790C2713F0400F3E4B4FF0000C1A7814BF21
:401E000042F0010202F0FE021A70027AD20007FB0541C36803EB02094B4531D093F802A00AF07F06AE4229D10E89B3F804B0B6B25E4538BFA1F808B01E7893F801B01EF8DF
:401E40000660B3451AD181F804A0DE780E7093F902A0DE78BAF1000F06F0030607DA012E0CBF07260D264E7181F8018006E0012E0CBF052609264E7181F801C00833CBE7D7
:401E80000135092DC3D1C1680A328B1C0A440C200833934209D013F8081C13F80A5C01F07F0100FB01418D72F2E7FFF767FF114B0121186000230C2000FB0142D3801289C0
:401EC000013113449BB203F00102134409299BB2F2D1BDE8F84FFFF767BEBDE8F88F00BF8C86FF1F7286FF1FFA86FF1F8586FF1F8386FF1F8886FF1F114B1B7903F07F03C6
:401F00005A1E072A19D80F490C2202FB031291781B0141F0010191700021D170517841F002015170127912F0800F074A1A4414BF8D2389239370FFF715BC0020704700BF9C
:401F4000006000408C86FF1FFC5F004030B4194B1A7902F07F02531E072B27D8164B0C2404FB02339978154D01F0FE0199700021D97029461201505D114400F07F005055D3
:401F80005A7802F0FD025A701A795B78120605D5012B01D18C7006E00D2303E0012B0CBF082309238B7030BCFFF7DCBB002030BC704700BF006000408C86FF1FFC5F00409A
:401FC00010B50D4B0D4C21791878C9B20138C0B2FFF72EFE43681B798B4201D2012909D8074A0848535CDBB24354A3780120DBB2535410BD002010BD8586FF1F00600040A8
:402000007286FF1FFA86FF1F38B58A4A8A4C13780021DBB221801806517840F18D800A2900F20581DFE811F05D00030103010301030103010B0003017E0003018200D37814
:402040007C49012B09D17D4B1A787D4B03EBC2035B685B686360122310E0CB78022B12D18878FFF7E5FD002800F0E180436863606368DA7863689B7843EA02232380BDE8AB
:402080003840FFF78FBCCB78032B26D16D4B00228878D5B2854209D3664A91786A4AEE2908BF1346634A917881B106E0187801320028F1D018780344EAE764499278097CF9
:4020C000914203D16248FFF739FD614B1A78002A00F0AD801A78228018E0BDE8384000F01FBF13F0030313D0022B40F0A0802380504B0C211B7903F07F02564B01FB023319
:402100009A78554BD2B21A7000225A706360B6E702222280514A11784F4AC9B2117053706260ACE7012323804D4BEFE70123238013794C4A1344E9E701390A2977D8DFE834
:4021400001F037764F76067676760A7620009378454ADBB25AE0937803F0FF0153B9404B1A7891425FD01970404B01201870FFF715FE58E0481EC0B2FFF75AFD0028EED160
:4021800055E0FFF71DFF002851D02A4A384913791279DBB2D2B20A70364A3249D25CCB5C9A4240D0314B01221A70FFF753FD3AE003F00303012B2BD009D3022B37D11D4B9A
:4021C0009B78002B33D1BDE83840FFF7BFBE194B9B78012B2BD1214A137803F0FD0315E003F00303012B13D008D3022B1FD1114B9B78E3B9BDE83840FFF77EBE0D4B9B78CB
:40220000012B14D1154A137843F0020313700AE0084B1A795AB998781B791749DBB2CA5C22EA0002CA54BDE83840FFF79BBA002038BD00BF006000407486FF1F8086FF1F0A
:402240000C3A0000703A0000F8390000E33A00001887FF1F8C86FF1F3186FF1F8386FF1F8586FF1F7286FF1F7086FF1F8486FF1F8186FF1FFA86FF1F8786FF1F074B1A78EA
:40228000120609D55B78012B06D1054B054A5A6012781A80FFF786BB00207047006000407486FF1FD0390000014B1870704700BF77650040014B1878704700BF6865004041
:4022C000014B1870704700BF7F640040074A0223136002F688321268E0215064044A11706FF440710A441360704700BF80E100E001E400E0014B1870704700BF7A6500401E
:4023000073B515461E460B4C04230022019200920A4601461846237000F09EF932462946207800F059F90221207800F043F9207802B070BDD080FF1F064A0123136002F676
:4023400088321268E0211064034A1170A2F540721360704780E100E000E400E0014B1870704700BF7865004073B515461E460B4C05230022019200920A46014618462370D2
:4023800000F06AF932462946207800F025F90221207800F00FF9207802B070BDD180FF1F064A0423136002F688321268E0219064034A1170A2F202321360704780E100E098
:4023C00002E400E0014B04221A60704700E100E0014B04221A60704780E100E0014B1870704700BF7B640040014B1870704700BF7D640040704738B505460078012428B196
:4024000000F026FD285D0134E4B2F8E738BD08B50D2000F01DFDBDE808400A2000F018BDF7B516461F460B4C00230325019300930A4601462846257000F00EF93A463146D7
:40244000207800F0C9F80221207800F0B3F8207803B0F0BDE080FF1FF7B516461F460B4C00230225019300930A4601462846257000F0F2F83A463146207800F0ADF829460B
:40248000207800F097F8207803B0F0BDE180FF1FF7B516461F460B4C00230125019300930A4601462846257000F0D6F83A463146207800F091F80221207800F07BF8207844
:4024C00003B0F0BDE280FF1F73B515461E460B4C0023019300930A4601461846237000F0BBF832462946207800F076F80221207800F060F8207802B070BD00BFE380FF1FB2
:40250000024B1878C0F38010704700BF8F450040074A7F23802113705170064A013BDBB202F80839002BF9D1034A1370704700BFE480FF1FF87B00400078004017280FD877
:40254000084B0001C25C11B142F0200201E002F0DF02C254C25C42F00102C25400207047012070471070004017280BD8064B0001C25C02F0FE02C254C25C02F0DF02C25490
:4025800000207047012070471070004017280DD8074900010B4603441A7942F004021A71435C43F00103435400207047012070471070004017280BD8064A0001835C4900D2
:4025C00003F0F10301F00E011943815400207047012070471070004041F6FF73994208BF4FF400519A4208BF4FF4005217289FBFC00000F1804000F5EC4081809ABFC28072
:40260000002001207047000017289FBF034B00011954002088BF0120704700BF1970004017289FBF054B00011A5C01F007019DBF1143195400200120704700BF147000408D
:4026400017289FBF034B0001185C00F0070088BFFF20704714700040172810B51AD8C00001F07F0100F1804441EAC21204F5EC44D2B222709DF8082003F00F0343EA021304
:40268000DBB263709DF80C30002003F00F03A370E07010BD012010BD10B500F039FC0A4A5378182B0AD91478013B5370E30003F1804303F5F0431B78137000E0FF2400F01E
:4026C0002BFC204610BD00BFE480FF1F030610B5044611D400F01CFC084AE300117803F1804303F5F04319705378147001335370BDE8104000F010BC10BD00BFE480FF1F0C
:4027000030B504060CD411F4704509D1C40004F1804404F5F0442180A270E370284630BD012030BD03065FBFC00000F1804000F5F04081805ABFC28000200120704700000C
:4027400038B50446084DB4F5004F05D9286800F0D7FBA4F50044F6E7034B58686043BDE8384000F0CDBB00BFEC80FF1F024B1B7A584300F0C5BB00BFEC80FF1F0E4B00F0DD
:4027800003001A78490102F0FC02104318701A7801F0600142F080021A701A7802F07F021A701A7802F09F020A431A701A7842F010021A70704700BF83430040014B012277
:4027C0001A70704784430040044B00F00F021B6853F8220043F82210704700BF08ED00E0054A00F01F00126800F1100352F8230042F82310704700BF08ED00E000F01F0089
:4028000000F16040490100F56440C9B2017070470F4B10B50F4900240F205C609C60DC601C615C61FFF7D0FF0B4A136843F0040313600A4B4FF47A72DB68B3FBF2F3084A9B
:402840001360084B4FF400421C60C3F8E82010BD3486FF1FBD28000010E000E0EC80FF1F14E000E018E000E0024A136843F002031360704710E000E008B5FFF7F5FF034A51
:40288000136843F00103136008BD00BF10E000E010B5054CA3691BB9FFF7BAFF0123A361BDE81040FFF7E8BF3486FF1F024B1868C0F30040704700BF10E000E038B5FFF77F
:4028C000F5FF012808D1054D002455F8243003B198470134052CF8D138BD00BF3886FF1F024B03EB80035868596070473486FF1F134B144A1B78DBB20360127843EA022398
:40290000114A0360127843EA0243104A0360127843EA026303600E4B0E4A1B78DBB24360127843EA02230C4A4360127843EA02430A4A4360127843EA02634360704700BF30
:402940000301004904010049EC460040020100490101004900010049050100490601004910B500F0D5FA204A044613780A2043F002031370137C43F00203137412F80A3C84
:4029800043F0010302F80A3C937943F00103937102F5AB52137843F003031370134B18221A7013F8012C42F0400203F8012C13F8012C02F0FC0203F8012CCE2203F8062CBB
:4029C000A3F597530222183B1A70094A137843F008031370FFF7CAFE064B10222046BDE810401A6000F098BAAB4300400E5900402F5B004080E200E008B500F089FA0F4AF3
:402A0000137803F0FE031370A2F5AA521D3A137803F0FD031370137C03F0FD03137412F80A3C03F0FE0302F80A3C937903F0FE039371BDE8084000F06FBA00BF08590040B2
:402A4000044A137803F03F0343EA8010C0B21070704700BF08590040082804D00A280CBF8223C22300E0422308380E4AC0B20428137098BF0C4B4FF0000298BF33F9101067
:402A80000A4B88BF11461A8042F210734B4341F2883103F6C41393FBF1F305490B60054B1A8070470A590040BC3900000287FF1F0487FF1F0887FF1F08B5102000F0A6F9AB
:402AC00007210420FFF79AFE07490420FFF788FE064A0C20137843F006031370FFF7BCFF034B00221A8008BDB12B0000095900400087FF1F10B5054C23781BB9FFF7DCFF4D
:402B000001232370BDE81040FFF72ABF5086FF1F044B1A7802F0FB021A701A7842F001021A7070470859004010B5084B1C7814F0010403D10028F9D0002404E02046FFF735
:402B400015FE024B1B78204610BD00BF09590040034A044B1B881088181A00B2704700BF0887FF1FA25B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4BF4
:402B80001B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F000B270470287FF1F0487FF1F0087FF1F7047000010B500F0ABF9214A04461378D8
:402BC0000A2043F001031370137C43F00103137412F80A3C43F0020302F80A3C937943F00203937102F5AA521832137843F003031370144B18221A7013F8012C42F0400241
:402C000003F8012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222123B1A70094A137843F008031370FFF79FFD074B08222046BDE810401A6000F06DB900BF2B
:402C4000AB43004006590040275B004080E200E008B500F05DF90F4A137803F0FE031370A2F5AA52153A137803F0FE031370137C03F0FE03137412F80A3C03F0FD0302F8FA
:402C80000A3C937903F0FD039371BDE8084000F043B900BF00590040044A137803F03F0343EA8010C0B21070704700BF00590040082804D00A280CBF8223C22300E04223FE
:402CC00008380E4AC0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6C41393FBF1F305490B60054B1A8070470259004094
:402D0000C63900000E87FF1F1487FF1F0C87FF1F08B5102000F084F807210320FFF76EFD07490320FFF75CFD064A0C20137843F006031370FFF7BCFF034B00221A8008BD6A
:402D4000092E0000015900401087FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF728BF5186FF1F044B1A7802F0FB021A701A7842F001021A70704700590040FE
:402D800010B5084B1C7814F0010403D10028F9D0002404E02046FFF7E9FC024B1B78204610BD00BF01590040034A044B1B881088181A00B2704700BF0C87FF1FA05B0040C7
:402DC0000E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F000B270470E87FF1F69
:402E00001487FF1F1087FF1F70470000034A00F0F800137803431370704700BF02410040034A00F0F800137803431370704700BF06410040014B1870704700BF79650040FD
:402E4000014B1870704700BF7C64004000000000FEB5494652465B460EB40746244909688A46244A12682448022100F071F8030020480068C018204900F06AF81438834665
:402E80000121C9430C460125002600F041F8814651460B7823400B705846013000F030F83800F04028400B78234003430B70584600F026F80136072EF2D900200130013893
:402EC000013001200B78234003430B705846043000F016F8484600F01FF800BF00BF00BF0EBC894692469B46FEBD00BFAFF30080D480FF1FF880FF1F00C20100000000007E
:402F00000230800803D000BF01380046FCD17047EFF3108072B6704780F31088704700BF094A137803F00303012B0AD0022B09D113790C2103F07F02044B01FB02339B7ACA
:402F400000E0137900207047006000408C86FF1F002902D0B0FBF1F0704708B14FF0FF3000F008B80029F8D00246B0FBF1F000FB11217047704700BF014B1868704700BFC8
:402F80005C81FF1F0E4B70B51E460E4C0025E41AA410A54204D056F8253098470135F8E700F0BCFD084B094C1E46E41AA4100025A54204D056F8253098470135F8E770BDA6
:402FC000283B0000283B0000283B0000303B000003460244934202D003F8011BFAE7704730B5141E05469BB0184604DA8B232B604FF0FF301DE04FF40273ADF80C300CBF67
:40300000234604F1FF33029305934FF6FF7300910491ADF80E3002461E9B6946284600F073F8431CBCBF8B232B6014B1009B00221A701BB030BD000007B5009313460A46CB
:40304000014603480068FFF7CBFF03B05DF804FB5C81FF1F2DE9F0478E6882469E420C46914698463ED88A8912F4906F3AD02568096902236F1A656905EB450595FBF3F53D
:403080007B1C43449D4238BF1D4653050FD5294600F04AFB064698B13A46216900F0D2FAA38923F4906343F08003A38113E02A4600F098FB064670B92169504600F0E8FA21
:4030C0000C23CAF80030A3894FF0FF3043F04003A381BDE8F08726613E44266046466561ED1BA560464528BF464649463246206800F0B3FAA36800209B1BA36023681E4476
:403100002660BDE8F08700002DE9F04F9DB003938B8980461C060D4616460DD50B695BB9402100F001FB2860286118B90C23C8F80030CDE040236B610023099320238DF8EF
:403140002930DFF89CB130238DF82A3037463C4614F8013B1BB9B7EB060910D003E0252BF9D02746F3E74B46324629464046FFF771FF013000F0A780099B4B4409933B7883
:40318000002B00F0A08000234FF0FF3204930793059206938DF853301A930126052221784E4800F041FA671C049B38B14B4A3C46801A06FA00F018430490EFE7D90644BF30
:4031C00020228DF853201A0744BF2B228DF8532022782A2A03D0079A00210A200BE0039A111D12680391002A10DA524243F00200079204900BE027463B780134303B092BD2
:4032000003D800FB02320121F5E701B107923B782E2B1ED17B782A2B0AD1039B02371A1D1B680392002BB8BF4FF0FF33059310E0002319460593781C0A2407463A78013050
:40324000303A092A03D804FB01210123F5E703B1059103223978224800F0E6F940B14023CBEB000003FA00F0049B013718430490397806221B487E1C8DF8281000F0D4F94F
:4032800088B1194B33B9039B073323F007030833039314E003AB00932A46144B04A94046AFF3008007E003AB00932A460F4B04A9404600F093F8B0F1FF3F824603D0099BA8
:4032C0005344099342E7AB895B0601D4099801E04FF0FF301DB0BDE8F08F00BFF73A0000FD3A0000013B000000000000553000002DE9F04791461F460A698B68064693422F
:40330000B8BF1346C9F8003091F843200C46DDF8208012B10133C9F800302368990642BFD9F800300233C9F80030256815F0060510D104F1190A07E00123524639463046B1
:40334000C04701301AD00135E368D9F800209B1A9D42F1DB94F843302268003318BF012392060FD5E118302081F843005A1C94F845102244023382F8431003E04FF0FF3011
:40338000BDE8F08704F1430239463046C0470130F4D02268D9F80050E36802F00602042A08BF5D1B2269A3680CBF25EAE57500259342C4BF9B1AED184FF000091A344D4540
:4033C00009D00123224639463046C0470130D5D009F10109F3E70020BDE8F0872DE9F04317460A7E85B06E2A984606460C460C9B01F1430E00F0AE8011D8632A22D009D8B4
:40340000002A00F0BB80582A40F0CA8081F84520834955E0642A1ED0692A1CD0C0E0732A00F0B08009D86F2A2ED0702A40F0B8800A6842F020020A603EE0752A24D0782A07
:403440003AD0ADE01A6801F14205111D1960136884F84230A8E021681A6811F0800F02D0111D196008E011F0400F02F10401196002D0B2F9003000E01368002B3CDA2D220D
:403480005B4284F8432037E021681A6811F0800F02D0111D196007E011F0400F02F10401196001D0138800E01368227E5C496F2A14BF0A2208221BE078225A4984F84520D6
:4034C0002268186812F0800F00F104051D6003D1550601D5038800E00368D00744BF42F0200222601BB9226822F0200222601022002084F8430001E049490A226568002D71
:40350000A56008DB206820F0040020602BB9002D7DD175460CE0002B79D07546B3FBF2F002FB1033CB5C05F8013D03460028F5D1082A0BD12368DA0708D5236962689A4260
:40354000DEBF302305F8013C05F1FF35C5EB0E0323612EE008681A6810F0800F496903D0101D1860136808E010F0400F02F104001860136801D0198000E0196000232361F3
:40358000754616E01A68111D1960156800216268284600F049F808B1401B6060636804E004F1420584F8422001232361002384F84330CDF800803B4603AA21463046FFF78D
:4035C00097FE013002D14FF0FF3026E023692A4639463046C0470130F5D023689B0710D5002504F1190907E001234A4639463046C0470130E7D00135E368039A9B1A9D4251
:40360000F2DBE068039B9842B8BF184605E00B7804F1420584F842308AE705B0BDE8F083AB390000083B000010B5C9B202449042034605D01C7801308C42F8D1184610BD34
:40364000002010BD10B5431E0A44914204D011F8014B03F8014FF8E710BD884210B501EB020301D8421E0BE09842FBD28118D21AD34204D013F8014D01F8014DF8E710BDF1
:40368000994204D011F8014B02F8014FF8E710BD38B50546002944D051F8043C0C1F002BB8BFE41800F0D4F81E4A1368114613B96360146030E0A3420DD92268A01883426E
:4036C00001BF18685B681218226063600C6023E0A24203D813465A68002AF9D118681918A1420BD12168014458188242196013D110685268014419605A600DE002D90C23AB
:403700002B6009E021686018824201BF106852680918216062605C602846BDE8384000F098B838BD5886FF1F70B5CD1C25F0030508350C2D38BF0C25002D064601DBA94279
:4037400002D90C23336046E000F082F8234B1C681A462146A1B10B685B1B0ED40B2B03D90B60CC18CD501EE08C420BBF63684B681360636018BF0C4615E00C464968E9E78D
:40378000174C23681BB9304600F052F820602946304600F04DF8431C18D0C41C24F00304A0420DD12560304600F053F804F10B00231D20F00700C31A0ED05A42E25070BDB8
:4037C000211A304600F034F80130EBD10C233360304600F03EF8002070BD00BF5886FF1F5486FF1FF8B5074615460E4621B91146BDE8F840FFF798BF1AB9FFF749FF28462E
:40380000F8BD00F027F885420ED929463846FFF78BFF044650B131462A46FFF713FF31463846FFF735FF01E03046F8BD2046F8BD38B5064C0023054608462360FDF7E2FBDA
:40384000431C02D1236803B12B6038BD3C87FF1F7047704751F8040C0028BEBF091851F8043CC0180438704700000000050209020B020D020F02110213027265706C7920E2
:4038800030782530327800686F6D696E6700626567696E6E696E67207365656B2066726F6D20256420746F2025640066696E6973686564207365656B0057616974696E6758
:4038C00020666F72205553422E2E2E0055534220726561647900636F6D6D616E642030782530327800756E64657272756E206166746572202564207061636B65747300634C
:403900006F756E743D256420693D256420643D2564207A7A3D256400636D645F777269746500703D25642063723D25642063773D256420663D256420773D256420696E6415
:4039400065783D256420756E64657272756E3D25640077726974652066696E69736865640073746172742065726173696E670073746F702065726173696E670069646C6512
:403980000000510040100030510040400000000140001000140140000800400140000A004C0140000200500140200030313233343536373839414243444546000001000049
:4039C0000004000000100001000000040000001028000000000104000100000000000000000157494E5553420000303030303100000000000000000012034D0053004600AB
:403A000054003100300030000100000001000000143A000001000000E33A00000000000000000000010000002C3A000001000000B53A0000040000004E3A00000000000050
:403A400000000000000000004C3A0000FF00000001024000FF00000082024000FF00000003034000FF00000084034000FF00020304030904160346006C007500780045009B
:403A80006E00670069006E0065002A0343006F0077006C00610072006B00200054006500630068006E006F006C006F0067006900650073000009022E0001010080320904F7
:403AC000000004FF00000107050102400000070582024000000705030340000A0705840340000A12010002FF0001080912006E0100020180014300232D302B2000686C4C11
:403B000000656667454647003031323334353637383961626364656600000000F8B500BFF8BC08BC9E4670475900000081100000F8B500BFF8BC08BC9E4670473500000002
:403B4000503B0000C880FF1F98000000E0050000000000004087FF1FFFFF0000675000400C00000007000000FFFFFFFF7F8000003F0000000000007D00FA000040000000F9
:403B80000090D0030000000000000000000000000000000000000000000000000000000000000000F53A000000000000000000000000000000000000000000000000000073
:403BC000000000000000000000000000000000000000000000000000000000000000000000000000FC80FF1F0000000000000000000000000000000000000000000000002B
:403C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084
:4008C0000BD07F223F495A540133402BFAD10A910B9328E0BAF1000F06D1012000F08AFD01288046F6D107E0237B002B40F08F806B7B002BF1D08AE03249FFF72FFC81462E
:40090000304B0B9040460A9300F092FEB9F13F0F07F1010706DD059BDB1BD3F1000949EB030900E0C1460B9BDBB16368079A0AA802EB83120D9BC3F1400313440C9300F042
:40094000D6F90D9B6BB96A681F4B01321340002BBEBF03F1FF3363F00F030133636040230D93A36801333FD16B680F2B3CD14FF00008C5F8088001F015FD85F80C80AB68D9
:4009800095F86C002B44197E01F028FE95F86C0001F0E6FD012195F86C0001F0B9FD85F80D80637B002BFCD04FF00008012086F80D8001F003FD404601F0C0FCCDF81880BF
:4009C00015E000BFF885FF1F0F00008015390000A03800002F390000423900009B650040A081FF1F9F81FF1FBAF1000F05D0237B6BB96B7B5BB94FF0010AA368069A93423E
:400A00003FF43EAFAB680BF1010B069338E701F0CFFC012001F092FC002001F0CFFC042194F86C0001F0E6FD94F86C0001F0F2FD0028F9D196F86C0001F080FD737B327BCD
:400A40000293012303920193CDF800905B463A4605997B48FFF727FCB9F1000F16D1059BBB420ADD012000F0C5FC01288046F6D17449FFF773FB3F2803DC012000F0ECFD97
:400A800004E0404600F0D4FD0137E8E7FFF7BEFB6D48FFF708FC237B0BB10220C5E06B4B1B8809A8ADF824302DE094F82E0001F03FFCA06AFFF72EFC6548FFF7F4FB0023B0
:400AC0006373637B002BFCD0012001F077FC00237373637B002BFCD0002001F06FFC5D48FFF7E1FB5C4B0AE00020E073FFF712FC5A4B04E094F82E00FFF718FB584B1B885B
:400B0000ADF828300AA8FFF7E3FB90E0237C3BB1002001F0E9FB002002F07CF900232B7402F0FEF8002002F0A1F82A2701F0CCFF002001F06FFF3A4600210AA802F060FA3B
:400B400015238DF828308DF8297001F021FE002001F0CAFB002002F05DF9C82001F0DAFD0DEB0700FFF76AFB0DF13E00FFF787FB01F00EFE012002F04DF9322001F0CAFDD6
:400B80000DF12E00FFF75AFB0DF14200FFF777FB012001F0A9FB4FF4967001F0BBFD01F0F7FD0DF13600FFF749FB0DF14A00FFF766FB002001F098FB4FF4967001F0AAFDF7
:400BC00001F0E6FD022002F025F9322001F0A2FD0DF13200FFF732FB0DF14600FFF74FFB012001F081FB4FF4967001F093FD01F0CFFD0DF13A00FFF721FB0DF14E00FFF795
:400C00003EFB002001F070FB4FF4967001F082FD01F0BEFD002002F0FDF80023E37302F001F801F0D3FE6DE70120FFF763FB032000F0FEFC0B48FFF736FBFFF7D6BB00BFD7
:400C40004C390000F885FF1F7C390000A23800008B39000099390000A4380000A6380000A8380000A639000010B54268002A2ED0C368002B2BD00368048A591C01601B786C
:400C8000013A13F0800F817C42601DBF03F0010242EA84030231083114BF43F0020343EA0423817414BF03820382837C072BDCD9028A083B42FA03F38268511C8160137004
:400CC000C368013BC360837C083B8374CDE710BD07B5827C42B102AA002102F8011D026001224260FFF7C0FF03B05DF804FB30B543686BB3C2685AB3827C072A0CD80468D7
:400D000090F91050611C01602178013B41EA05210832018243608274827C018AA2F108042141CBB2090608D5C3F3801363F07F03023A03F08103827402E08474002BD7D00A
:400D40008268511C81601370C368013BC360CFE730BD00002DE9F04172B644F21A118E4B61221A70A3F5F06301221A8019244FF443729C709A80894A1B231370518044F633
:400D80001F611371D1801372854A864B92E80300062283F8002283E80300522203F580731A70814B814A1B78814EDBB2137040F61802804B00251A8041F2512223F8022C4E
:400DC00033784FF4F07003F0010343EA450502F0AFF8013C05F003052ED0032DF0D1764B4FF480721A8007221A70744A002548211570917002221D705D7103F8032C042291
:400E0000DA716F4A6F4C13786F4E43F00F03137012F8013C062743F0030302F8013C2378012243F0800323705B4B1A70674A137843F02003137000E0FEE707FB0563002163
:400E40009A881868013502F0DBF8072DF5D16048604E002550F8041F05F1105303F1560221F0FF075733C9B20B4452005B0002329A4206D012F802EC12F801CC0EF807C0B6
:400E8000F5E7B0420D44E5D1534A00231360936013619361514B524F1A68524BDFF890811A60514B1A68514B1A60514A137843F002031370137C43F0020313742378A2F57C
:400EC000863243F040032370413A137843F010031370484A484B07CA03C31A80474A2833106843F8250C127903F8212C444A07CA03C31A80434AE83B07CA03C31A80424A3D
:400F0000083307CA03C31A80404A414BA2F5616203CBC2F8100EC2F8141E1378042043F0080313703B4B02F5AA521B783D78DBB298F80060EDB203F007010C321B09117018
:400F4000F6B2537045F003033B7046F0030388F80030314B48221A70304A402313703049937013729372082382F81F3220220A7048710A722B4A0A20137001F0E1FB2A4B13
:400F800088F8006044223D70284D1A7094E80F0007C52B80BDE8F081004800408640004074100048004100400F010049A14600402542004022420040044000400640004077
:400FC000A2430040A0430040AB390000E8460040FCFFFF47A8000048007600407C100048F84600402076004080100048287600400350014034100048C05100404010004889
:40100000481000485410004860100048325100406C100048CF0100491D51004001590040235B0040585B004076580040B0430040F946004008B501F0B7FF03680C2B00D17C
:40104000FEE7FEE7084908B50B68084A1844821A802A01DC086005E001F0A6FF0C2303604FF0FF33184608BDCC80FF1F4887FF1F80B51148114B0025C0B1A3F1100192C974
:4010800022460439161BB74204D051F8046F42F8046BF7E7114653F8046C8C1AA64202D041F8045BF9E701381033E5E701F082FFFFF774F9FEE700BF010000007C3B0000E7
:4010C000124A134B10B51A60124A134C1368134843F4007313600023032B98BF54F823204FEA830188BF0E4A0133302B4250F3D10C4B1A780C4B1A700C4B084A1A60FFF7EE
:4011000029FEBDE8104001F0EDB900BF0004FA050CED00E014ED00E0000000000080FF1F35100000BC760040C080FF1F08ED00E0F8B501F005FF4B4A01271378022643F0B3
:4011400001031370137C484C43F001031374474B02F5E3521F700B3203F8946C1378054603F07F031370002001F0EAFA2378404A03F0F90323701378384603F0DF031370B7
:4011800023783B43237001F0DBFA282001F0D8FA384B30461A7802F07F021A701A7802F0BF021A7023783343237001F0C9FA2378314A43F0040323700023137053702F4A3E
:4011C000FF2199540133092BFBD1284601F0BCFE0721172001F0FCFA2949172001F0EAFA0721182001F0F4FA2649182001F0E2FA0721152001F0ECFA2349152001F0DAFA84
:401200000721052001F0E4FA2049052001F0D2FA0721062001F0DCFA1D49062001F0CAFA0721084601F0D4FA1A49072001F0C2FA0721082001F0CCFA1749082001F0BAFA51
:401240000021162001F0C4FA1449162001F0B2FA07210C2001F0BCFABDE8F84010490C2001F0A8BAA5430040944300409D60004012600040F8510040846000406D86FF1F9C
:40128000FF1A000039190000FD1A0000311A00005D1A00008D1A0000C51A0000051B0000791B0000214B224A10B5187000231370204A40201370204A0F2413701F4A13708C
:4012C0001F4A13701F4A13701F4A13701F4B4FF400021A604FF080721A604FF400121A6020221A601860802018604FF480701860174804704FF480001860164B1A70933BC9
:4013000019B91A7802F0FE0202E01A7842F001021A70114B03221A70802203F8202C012001F006FE0D4B04221A7010BD8886FF1F8E86FF1F8C86FF1F8D86FF1F8986FF1F59
:401340007886FF1F8B86FF1F0087FF1F00E100E09E6000409C600040286000401260004070B5074C054623780E461BB9FFF7E0FE0123237031462846BDE87040FFF792BF36
:401380003886FF1F0A4A002313700A4A13700A4A13700A4A13700A4A13700A4A13700A4A13700A4B03221A70802203F8202C70478E86FF1F8C86FF1F8D86FF1F8986FF1FE9
:4013C0007886FF1F8B86FF1F0087FF1F28600040014B1878704700BF8D86FF1F044B1A7802F0FF001AB118780022C0B21A7070478C86FF1F024A0C2303FB00204078704778
:401400009486FF1F431E072B0CD8074A064B00010344805C5B7800F00F0043EA0020023880B2704700207047FC5F00401A4A38B50C2303FB00231B79090C13F0800F00F1B6
:40144000FF35044619BF8AB24FF480438BB24FF48042032D18D8DFE805F002070C110021084601F01BF80DE00021084600F0FAFF08E00021084600F0D9FF03E00021084667
:4014800000F0B8FF054B1855EDB2072D03D801F0EDF8034B185538BD9486FF1F6486FF1F6D86FF1F431E072B2DE9F0470446894615465CD82F4F0C2202FB0072D388DFF86E
:4014C000B8A09BB2C3F500739D424FF00C0303FB007388BFD588DB7884BFC5F50075ADB2254A43EA15230601B354B244EBB28AF80130224B1A5C9846FF2A01D1FFF796FF47
:401500000C2303FB047200215170B9F1000F28D03DB31B4F385D01F011F811232946FE2218F8040001F0D6F806F5C04278321FFA89F118F8040001F0DFF8124D18F804105D
:40154000385D01F04BF80121385D00F0E1FF735D43F002037355735D03F0FD037355BDE8F08703FB04746379DBB28AF80230BDE8F08700BF9486FF1FFC5F00406D86FF1F52
:401580006486FF1F706000402DE9F047044615468846002940D0431E072B3FD8FFF732FFA84203D22046FFF72DFF05461D4E335DFF2B03D141462046FFF738FFDFF868A0C5
:4015C00027011AF8040000F0B9FF1223FE222946305D01F07FF807F5C0411FFA88F27831305D01F089F8DFF84490315D1AF8040000F0F4FF01211AF8040000F089FF17F823
:40160000093043F0020307F8093017F8093003F0FD0307F8093002E00D4600E000252846BDE8F0876D86FF1F6486FF1F70600040431E072B0AD8064A0C2303FB002300226A
:401640005A705A79034BD2B200011A54704700BF9486FF1FFE5F0040431E072B9FBF024B000108221A547047FE5F004030B51A4A1A491B4D0878138803449BB21380194A5D
:4016800000231488D8B2A4B27CB1082B0CD050680078C0B2E85450680133013050601088013880B21080ECE718460B780E4C082B0E4A00D040B10E4D2B7883F080032B7028
:4016C0000F232370022301E0022323701370094B1870087030BD00BF0487FF1F0087FF1F006000407C86FF1F7986FF1F8E86FF1F8A86FF1F0187FF1F074B02221A70074B61
:4017000080221A70064B0F221A70064A00231370054A0120137070478E86FF1F8A86FF1F7986FF1F0087FF1F0187FF1F30B5164B16491B780A8803F00F03023BDBB21A4412
:4017400092B20A80124C134A0020118889B279B173B15568215C013BC9B229705168DBB20131516011880130013989B21180ECE7094A1370094A137883F080031370084BC8
:401780000B221A7030BD00BF296000400487FF1F006000407C86FF1F0187FF1F8A86FF1F7986FF1F064A06231370064A01201370054B80221A70054B00221A70704700BFC5
:4017C0008E86FF1F7986FF1F8A86FF1F0187FF1F054B9A683AB19A68044910709A680988518000229A6070477C86FF1F0487FF1F08B5124B1A78D2B21A701B78DBB21A06C0
:4018000002D50F4A137008BD0220FFF7E1FF0D4B1B7803F06003202B05D0402B06D043B900F012FC04E001F093FB01E000F046FD10B9034B03221A7008BD00BF2860004013
:401840007986FF1F0060004008B5084A084B0120197813880B449BB21380064B00221A70FFF7B6FF044B03221A7008BD0487FF1F0087FF1F8E86FF1F7986FF1F08B50C4BB1
:401880001B78DBB2042B07D0062B09D0022B0DD1BDE80840FFF7D8BFBDE80840FFF746BF0320FFF795FF034B03221A7008BD00BF8E86FF1F7986FF1F08B5054B00220120BE
:4018C0001A70FFF785FF034B03221A7008BD00BF8E86FF1F7986FF1F08B50A4B1A7832B11A78094942F080020A7000221A70074B002201201A70FFF76BFF054B03221A7051
:4019000008BD00BF7886FF1F086000408E86FF1F7986FF1F074B1B78DBB2042B05D0062B05D0022B05D1FFF7A1BEFFF7C5BFFFF7D3BF70478E86FF1F38B51D4C2378DBB2D3
:40194000DD0634D518060AD503F00F03012B2ED1FFF74EFF174B1B78190609D538BD5A0602D5FFF7D7FF03E09D0620D5FFF786FF23781B061BD4104B1A78104B1B7813434F
:401980000F4A13701278934211D10A4A0849154613782078DBB2000605D41378DBB20B700B7803F00F0328788342F1D138BD38BD286000407986FF1F8A86FF1F0187FF1F96
:4019C00029600040054A00231380054A916819B191680B7092685380704700BF0487FF1F7C86FF1F0E4808B503889BB213B9FFF783FE13E00B4B02221A700B4B00221A7060
:401A0000FFF7E0FF094AD1799379028843EA012392B2934238BF0380FFF728FE012008BD7C86FF1F8E86FF1F8A86FF1F00600040084B01221A700F3B9B7C074B1A7B02F05E
:401A40000302012A1EBFDA7B82F08002DA7301225A7370470B6000409486FF1F094B02221A700F3B93F82230074B1A7E02F00302012A1EBFDA7E82F08002DA7601225A7698
:401A8000704700BF0B6000409486FF1F0B4B04221A700F3B93F83230094B93F8242002F00302012A1EBF93F8272082F0800283F82720012283F82520704700BF0B600040E2
:401AC0009486FF1F0B4B08221A700F3B93F84230094B93F8302002F00302012A1EBF93F8332082F0800283F83320012283F83120704700BF0B6000409486FF1F7047FFF79A
:401B000041BC0000F0B5184B184E19780C27C9B201234FF0000C31B3CA0720D5144A4FEA031E7244947850782040C5070DD507FB03652C79240608D5147804F0FE04147076
:401B40006D790C4CEDB204F80E50840706D507FB036425792D0658BF84F801C090700133DBB24908D7E7F0BD9F6000409486FF1F70600040FE5F004000F0ACBC70B50446D2
:401B8000184B88B003AA03F11006154618685968083303C5B3422A46F7D11B782B70FCB12223237001AD03232846637000F08AFE002220461146AB5C08AC04EB131414F80B
:401BC000144C03F00F03847008AC234413F8143C0132082AC1700371417100F10400EAD108B070BDD53900002DE9F0431C4D01222E460C201F274FF0800E4FF0080C194B78
:401C000000FB02581401234418705F70164998F805902144B9F1000F07D098F8044024064CBF887081F802C001E081F802E000FB0261CC880132E4B29C71CC88092AC4F3C5
:401C40000724DC71CC88E4B21C71C988C1F307215971D4D1054BFF221A70BDE8F08300BF9486FF1F70600040FC5F00400A600040064B074A1B7802EBC30253681A7C82427E
:401C800086BF03EBC0035869002070478886FF1F383A00002DE9F84F424B1A78002A7ED01878414D0138C0B2FFF7E2FFA8463F4AC3681478007ADFF800C1E4B203EBC000E0
:401CC0000C2600274FF0010E834268D01A78A24263D11CF80420597891425ED19A7893F8039002F07F0206FB02FA05EB0A01CF7093F802B009F0030981F804B093F803B004
:401D000005F80AB0B3F804A0A1F808A093F902A0BAF1000F0BDAB9F1010F0CBF4FF007094FF00D0981F8059081F801E009E0B9F1010F0CBF4FF005094FF0090981F80590E4
:401D40004F704FEA02191A4906FB0282494481F802E0B2F808A0CAF3072A81F800A0B2F808A05FFA8AFA81F801A0B2F806A011495FFA8AFA494481F806A0B2F80690C9F3AF
:401D8000072981F80790B2F806905FFA89F981F80490D288C2F307224A71083394E7BDE8F88F00BF8D86FF1F9486FF1F8986FF1FFC5F0040706000407A86FF1F08B5064BBA
:401DC00018780138C0B2FFF753FF20B143681B7900EBC300406908BD8D86FF1F00212DE9F84F0B464E4E0C2707FB01F401313219092933554FF000059370494CD370138184
:401E0000937253705371EFD118B1464B1D70464B1D70464B1A78002A7FD0187801250138C0B2FFF725FFA8464368DFF8F8E0DB790C2713F0400F3E4B4FF0000C1A7814BFE0
:401E400042F0010202F0FE021A70027AD20007FB0541C36803EB02094B4531D093F802A00AF07F06AE4229D10E89B3F804B0B6B25E4538BFA1F808B01E7893F801B01EF89F
:401E80000660B3451AD181F804A0DE780E7093F902A0DE78BAF1000F06F0030607DA012E0CBF07260D264E7181F8018006E0012E0CBF052609264E7181F801C00833CBE797
:401EC0000135092DC3D1C1680A328B1C0A440C200833934209D013F8081C13F80A5C01F07F0100FB01418D72F2E7FFF767FF114B0121186000230C2000FB0142D380128980
:401F0000013113449BB203F00102134409299BB2F2D1BDE8F84FFFF767BEBDE8F88F00BF9486FF1F7A86FF1F0287FF1F8D86FF1F8B86FF1F9086FF1F114B1B7903F07F0354
:401F40005A1E072A19D80F490C2202FB031291781B0141F0010191700021D170517841F002015170127912F0800F074A1A4414BF8D2389239370FFF715BC0020704700BF5C
:401F8000006000409486FF1FFC5F004030B4194B1A7902F07F02531E072B27D8164B0C2404FB02339978154D01F0FE0199700021D97029461201505D114400F07F0050558B
:401FC0005A7802F0FD025A701A795B78120605D5012B01D18C7006E00D2303E0012B0CBF082309238B7030BCFFF7DCBB002030BC704700BF006000409486FF1FFC5F004052
:4020000010B50D4B0D4C21791878C9B20138C0B2FFF72EFE43681B798B4201D2012909D8074A0848535CDBB24354A3780120DBB2535410BD002010BD8D86FF1F006000405F
:402040007A86FF1F0287FF1F38B58A4A8A4C13780021DBB221801806517840F18D800A2900F20581DFE811F05D00030103010301030103010B0003017E0003018200D378C3
:402080007C49012B09D17D4B1A787D4B03EBC2035B685B686360122310E0CB78022B12D18878FFF7E5FD002800F0E180436863606368DA7863689B7843EA02232380BDE86B
:4020C0003840FFF78FBCCB78032B26D16D4B00228878D5B2854209D3664A91786A4AEE2908BF1346634A917881B106E0187801320028F1D018780344EAE764499278097CB9
:40210000914203D16248FFF739FD614B1A78002A00F0AD801A78228018E0BDE8384000F017BF13F0030313D0022B40F0A0802380504B0C211B7903F07F02564B01FB0233E0
:402140009A78554BD2B21A7000225A706360B6E702222280514A11784F4AC9B2117053706260ACE7012323804D4BEFE70123238013794C4A1344E9E701390A2977D8DFE8F4
:4021800001F037764F76067676760A7620009378454ADBB25AE0937803F0FF0153B9404B1A7891425FD01970404B01201870FFF715FE58E0481EC0B2FFF75AFD0028EED120
:4021C00055E0FFF71DFF002851D02A4A384913791279DBB2D2B20A70364A3249D25CCB5C9A4240D0314B01221A70FFF753FD3AE003F00303012B2BD009D3022B37D11D4B5A
:402200009B78002B33D1BDE83840FFF7BFBE194B9B78012B2BD1214A137803F0FD0315E003F00303012B13D008D3022B1FD1114B9B78E3B9BDE83840FFF77EBE0D4B9B788A
:40224000012B14D1154A137843F0020313700AE0084B1A795AB998781B791749DBB2CA5C22EA0002CA54BDE83840FFF79BBA002038BD00BF006000407C86FF1F8886FF1FBA
:40228000383A00009C3A0000243A00000F3B00002087FF1F9486FF1F3986FF1F8B86FF1F8D86FF1F7A86FF1F7886FF1F8C86FF1F8986FF1F0287FF1F8F86FF1F074B1A789F
:4022C000120609D55B78012B06D1054B054A5A6012781A80FFF786BB00207047006000407C86FF1FFC390000014B1870704700BF77650040014B1878704700BF69650040CC
:40230000014B1870704700BF78650040064A0123136002F688321268E0211064034A1170A2F540721360704780E100E000E400E0014B1870704700BF70640040014B187036
:40234000704700BF7965004073B515461E460B4C05230022019200920A4601461846237000F064F932462946207800F01FF90221207800F009F9207802B070BDD080FF1F2E
:40238000064A0423136002F688321268E0219064034A1170A2F202321360704780E100E002E400E0014B04221A60704700E100E0014B04221A60704780E100E0014B18702F
:4023C000704700BF71640040704738B505460078012428B100F054FD285D0134E4B2F8E738BD08B50D2000F04BFDBDE808400A2000F046BDF7B516461F460B4C002303254D
:40240000019300930A4601462846257000F00EF93A463146207800F0C9F80221207800F0B3F8207803B0F0BDE080FF1FF7B516461F460B4C00230225019300930A4601460C
:402440002846257000F0F2F83A463146207800F0ADF82946207800F097F8207803B0F0BDE180FF1FF7B516461F460B4C00230125019300930A4601462846257000F0D6F8D2
:402480003A463146207800F091F80221207800F07BF8207803B0F0BDE280FF1F73B515461E460B4C0023019300930A4601461846237000F0BBF832462946207800F076F8EE
:4024C0000221207800F060F8207802B070BD00BFE380FF1F024B1878C0F38010704700BF8F450040074A7F23802113705170064A013BDBB202F80839002BF9D1034A137087
:40250000704700BFE480FF1FF87B00400078004017280FD8084B0001C25C11B142F0200201E002F0DF02C254C25C42F00102C25400207047012070471070004017280BD8C6
:40254000064B0001C25C02F0FE02C254C25C02F0DF02C25400207047012070471070004017280DD8074900010B4603441A7942F004021A71435C43F00103435400207047C6
:40258000012070471070004017280BD8064A0001835C490003F0F10301F00E011943815400207047012070471070004041F6FF73994208BF4FF400519A4208BF4FF400524A
:4025C00017289FBFC00000F1804000F5EC4081809ABFC280002001207047000017289FBF034B00011954002088BF0120704700BF1970004017289FBF054B00011A5C01F0A3
:4026000007019DBF1143195400200120704700BF1470004017289FBF034B0001185C00F0070088BFFF20704714700040172810B51AD8C00001F07F0100F1804441EAC212E7
:4026400004F5EC44D2B222709DF8082003F00F0343EA0213DBB263709DF80C30002003F00F03A370E07010BD012010BD10B500F067FC0A4A5378182B0AD91478013B5370BB
:40268000E30003F1804303F5F0431B78137000E0FF2400F059FC204610BD00BFE480FF1F030610B5044611D400F04AFC084AE300117803F1804303F5F043197053781470D8
:4026C00001335370BDE8104000F03EBC10BD00BFE480FF1F30B504060CD411F4704509D1C40004F1804404F5F0442180A270E370284630BD012030BD03065FBFC00000F1A2
:40270000804000F5F04081805ABFC280002001207047000038B50446084DB4F5004F05D9286800F005FCA4F50044F6E7034B58686043BDE8384000F0FBBB00BFEC80FF1F06
:40274000024B1B7A584300F0F3BB00BFEC80FF1F0E4B00F003001A78490102F0FC02104318701A7801F0600142F080021A701A7802F07F021A701A7802F09F020A431A7055
:402780001A7842F010021A70704700BF83430040014B01221A70704784430040044B00F00F021B6853F8220043F82210704700BF08ED00E0054A00F01F00126800F11003B2
:4027C00052F8230042F82310704700BF08ED00E000F01F0000F16040490100F56440C9B2017070470F4B10B50F4900240F205C609C60DC601C615C61FFF7D0FF0B4A136801
:4028000043F0040313600A4B4FF47A72DB68B3FBF2F3084A1360084B4FF400421C60C3F8E82010BD3C86FF1F9128000010E000E0EC80FF1F14E000E018E000E0024A136882
:4028400043F002031360704710E000E008B5FFF7F5FF034A136843F00103136008BD00BF10E000E010B5054CA3691BB9FFF7BAFF0123A361BDE81040FFF7E8BF3C86FF1F7A
:40288000024B1868C0F30040704700BF10E000E038B5FFF7F5FF012808D1054D002455F8243003B198470134052CF8D138BD00BF4086FF1F024B03EB8003586859607047DA
:4028C0003C86FF1F134B144A1B78DBB20360127843EA0223114A0360127843EA0243104A0360127843EA026303600E4B0E4A1B78DBB24360127843EA02230C4A4360127814
:4029000043EA02430A4A4360127843EA02634360704700BF0301004904010049EC460040020100490101004900010049050100490601004910B500F003FB204A044613787A
:402940000A2043F002031370137C43F00203137412F80A3C43F0010302F80A3C937943F00103937102F5AB52137843F003031370134B18221A7013F8012C42F0400203F812
:40298000012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222183B1A70094A137843F008031370FFF7CAFE064B10222046BDE810401A6000F0C6BAAB430040A7
:4029C0000E5900402F5B004080E200E008B500F0B7FA0F4A137803F0FE031370A2F5AA521D3A137803F0FD031370137C03F0FD03137412F80A3C03F0FE0302F80A3C9379E7
:402A000003F0FE039371BDE8084000F09DBA00BF08590040044A137803F03F0343EA8010C0B21070704700BF08590040082804D00A280CBF8223C22300E0422308380E4ACE
:402A4000C0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6C41393FBF1F305490B60054B1A8070470A590040E639000087
:402A80000A87FF1F0C87FF1F1087FF1F08B5102000F0A6F907210420FFF79AFE07490420FFF788FE064A0C20137843F006031370FFF7BCFF034B00221A8008BD852B0000C5
:402AC000095900400887FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF72ABF5886FF1F044B1A7802F0FB021A701A7842F001021A7070470859004010B5084B8F
:402B00001C7814F0010403D10028F9D0002404E02046FFF715FE024B1B78204610BD00BF09590040034A044B1B881088181A00B2704700BF1087FF1FA25B00400E4A138832
:402B40001BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F000B270470A87FF1F0C87FF1F31
:402B80000887FF1F7047000010B500F0D9F9214A044613780A2043F001031370137C43F00103137412F80A3C43F0020302F80A3C937943F00203937102F5AA5218321378E1
:402BC00043F003031370144B18221A7013F8012C42F0400203F8012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222123B1A70094A137843F008031370FFF7A3
:402C00009FFD074B08222046BDE810401A6000F09BB900BFAB43004006590040275B004080E200E008B500F08BF90F4A137803F0FE031370A2F5AA52153A137803F0FE03E6
:402C40001370137C03F0FE03137412F80A3C03F0FD0302F80A3C937903F0FD039371BDE8084000F071B900BF00590040044A137803F03F0343EA8010C0B21070704700BFAF
:402C800000590040082804D00A280CBF8223C22300E0422308380E4AC0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6A9
:402CC000C41393FBF1F305490B60054B1A80704702590040F03900001687FF1F1C87FF1F1487FF1F08B5102000F084F807210320FFF76EFD07490320FFF75CFD064A0C20F5
:402D0000137843F006031370FFF7BCFF034B00221A8008BDDD2D0000015900401887FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF728BF5986FF1F044B1A78AB
:402D400002F0FB021A701A7842F001021A7070470059004010B5084B1C7814F0010403D10028F9D0002404E02046FFF7E9FC024B1B78204610BD00BF01590040034A044B6E
:402D80001B881088181A00B2704700BF1487FF1FA05B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F35E
:402DC0000028D8BF5B42134493FBF1F000B270471687FF1F1C87FF1F1887FF1F70470000034A00F0F800137803431370704700BF02410040034A00F0F8001378034313704D
:402E0000704700BF06410040014B1870704700BF79640040014B1870704700BF7465004073B515461E460B4C04230022019200920A46014618462370FFF7F8FB32462946C7
:402E40002078FFF7B3FB02212078FFF79DFB207802B070BDFC80FF1F074A0223136002F688321268E0215064044A11706FF440710A441360704700BF80E100E001E400E0D2
:402E8000FEB5494652465B460EB40746244909688A46244A12682448022100F071F8030020480068C018204900F06AF8143883460121C9430C460125002600F041F88146D3
:402EC00051460B7823400B705846013000F030F83800F04028400B78234003430B70584600F026F80136072EF2D9002001300138013001200B78234003430B705846043044
:402F000000F016F8484600F01FF800BF00BF00BF0EBC894692469B46FEBD00BFAFF30080D480FF1FF880FF1F00C20100000000000230800803D000BF01380046FCD17047B9
:402F4000EFF3108072B6704780F31088704700BF094A137803F00303012B0AD0022B09D113790C2103F07F02044B01FB02339B7A00E0137900207047006000409486FF1FBE
:402F8000002902D0B0FBF1F0704708B14FF0FF3000F008B80029F8D00246B0FBF1F000FB11217047704700BF014B1868704700BF6081FF1F0E4B70B51E460E4C0025E41A3D
:402FC000A410A54204D056F8253098470135F8E700F0BAFD084B094C1E46E41AA4100025A54204D056F8253098470135F8E770BD543B0000543B0000543B00005C3B00007E
:4030000003460244934202D003F8011BFAE7704730B5141E05469BB0184604DA8B232B604FF0FF301DE04FF40273ADF80C300CBF234604F1FF33029305934FF6FF730091B5
:403040000491ADF80E3002461E9B6946284600F073F8431CBCBF8B232B6014B1009B00221A701BB030BD000007B5009313460A46014603480068FFF7CBFF03B05DF804FBCF
:403080006081FF1F2DE9F0478E6882469E420C46914698463ED88A8912F4906F3AD02568096902236F1A656905EB450595FBF3F57B1C43449D4238BF1D4653050FD52946B8
:4030C00000F04AFB064698B13A46216900F0D2FAA38923F4906343F08003A38113E02A4600F098FB064670B92169504600F0E8FA0C23CAF80030A3894FF0FF3043F04003B2
:40310000A381BDE8F08726613E44266046466561ED1BA560464528BF464649463246206800F0B3FAA36800209B1BA36023681E442660BDE8F08700002DE9F04F9DB003938C
:403140008B8980461C060D4616460DD50B695BB9402100F001FB2860286118B90C23C8F80030CDE040236B610023099320238DF82930DFF89CB130238DF82A3037463C46DB
:4031800014F8013B1BB9B7EB060910D003E0252BF9D02746F3E74B46324629464046FFF771FF013000F0A780099B4B4409933B78002B00F0A08000234FF0FF3204930793F2
:4031C000059206938DF853301A930126052221784E4800F041FA671C049B38B14B4A3C46801A06FA00F018430490EFE7D90644BF20228DF853201A0744BF2B228DF853204C
:4032000022782A2A03D0079A00210A200BE0039A111D12680391002A10DA524243F00200079204900BE027463B780134303B092B03D800FB02320121F5E701B107923B782E
:403240002E2B1ED17B782A2B0AD1039B02371A1D1B680392002BB8BF4FF0FF33059310E0002319460593781C0A2407463A780130303A092A03D804FB01210123F5E703B1C9
:40328000059103223978224800F0E6F940B14023CBEB000003FA00F0049B013718430490397806221B487E1C8DF8281000F0D4F988B1194B33B9039B073323F007030833A3
:4032C000039314E003AB00932A46144B04A94046AFF3008007E003AB00932A460F4B04A9404600F093F8B0F1FF3F824603D0099B5344099342E7AB895B0601D4099801E0D9
:403300004FF0FF301DB0BDE8F08F00BF233B0000293B00002D3B000000000000853000002DE9F04791461F460A698B6806469342B8BF1346C9F8003091F843200C46DDF8AC
:40334000208012B10133C9F800302368990642BFD9F800300233C9F80030256815F0060510D104F1190A07E00123524639463046C04701301AD00135E368D9F800209B1AFC
:403380009D42F1DB94F843302268003318BF012392060FD5E118302081F843005A1C94F845102244023382F8431003E04FF0FF30BDE8F08704F1430239463046C047013097
:4033C000F4D02268D9F80050E36802F00602042A08BF5D1B2269A3680CBF25EAE57500259342C4BF9B1AED184FF000091A344D4509D00123224639463046C0470130D5D04C
:4034000009F10109F3E70020BDE8F0872DE9F04317460A7E85B06E2A984606460C460C9B01F1430E00F0AE8011D8632A22D009D8002A00F0BB80582A40F0CA8081F845207B
:40344000834955E0642A1ED0692A1CD0C0E0732A00F0B08009D86F2A2ED0702A40F0B8800A6842F020020A603EE0752A24D0782A3AD0ADE01A6801F14205111D1960136882
:4034800084F84230A8E021681A6811F0800F02D0111D196008E011F0400F02F10401196002D0B2F9003000E01368002B3CDA2D225B4284F8432037E021681A6811F0800F13
:4034C00002D0111D196007E011F0400F02F10401196001D0138800E01368227E5C496F2A14BF0A2208221BE078225A4984F845202268186812F0800F00F104051D6003D1DE
:40350000550601D5038800E00368D00744BF42F0200222601BB9226822F0200222601022002084F8430001E049490A226568002DA56008DB206820F0040020602BB9002D01
:403540007DD175460CE0002B79D07546B3FBF2F002FB1033CB5C05F8013D03460028F5D1082A0BD12368DA0708D5236962689A42DEBF302305F8013C05F1FF35C5EB0E0320
:4035800023612EE008681A6810F0800F496903D0101D1860136808E010F0400F02F104001860136801D0198000E0196000232361754616E01A68111D196015680021626886
:4035C000284600F049F808B1401B6060636804E004F1420584F8422001232361002384F84330CDF800803B4603AA21463046FFF797FE013002D14FF0FF3026E023692A4686
:4036000039463046C0470130F5D023689B0710D5002504F1190907E001234A4639463046C0470130E7D00135E368039A9B1A9D42F2DBE068039B9842B8BF184605E00B784F
:4036400004F1420584F842308AE705B0BDE8F083D5390000343B000010B5C9B202449042034605D01C7801308C42F8D1184610BD002010BD10B5431E0A44914204D011F857
:40368000014B03F8014FF8E710BD884210B501EB020301D8421E0BE09842FBD28118D21AD34204D013F8014D01F8014DF8E710BD994204D011F8014B02F8014FF8E710BDC8
:4036C00038B50546002944D051F8043C0C1F002BB8BFE41800F0D4F81E4A1368114613B96360146030E0A3420DD92268A018834201BF18685B681218226063600C6023E047
:40370000A24203D813465A68002AF9D118681918A1420BD12168014458188242196013D110685268014419605A600DE002D90C232B6009E021686018824201BF1068526820
:403740000918216062605C602846BDE8384000F098B838BD6086FF1F70B5CD1C25F0030508350C2D38BF0C25002D064601DBA94202D90C23336046E000F082F8234B1C683D
:403780001A462146A1B10B685B1B0ED40B2B03D90B60CC18CD501EE08C420BBF63684B681360636018BF0C4615E00C464968E9E7174C23681BB9304600F052F8206029460B
:4037C000304600F04DF8431C18D0C41C24F00304A0420DD12560304600F053F804F10B00231D20F00700C31A0ED05A42E25070BD211A304600F034F80130EBD10C2333605D
:40380000304600F03EF8002070BD00BF6086FF1F5C86FF1FF8B5074615460E4621B91146BDE8F840FFF798BF1AB9FFF749FF2846F8BD00F027F885420ED929463846FFF704
:403840008BFF044650B131462A46FFF713FF31463846FFF735FF01E03046F8BD2046F8BD38B5064C0023054608462360FDF7EAFB431C02D1236803B12B6038BD4487FF1F0D
:403880007047704751F8040C0028BEBF091851F8043CC0180438704700000000050209020B020D020F02110213027265706C792030782530327800686F6D696E6700626584
:4038C00067696E6E696E67207365656B2066726F6D20256420746F2025640066696E6973686564207365656B0057616974696E6720666F72205553422E2E2E005553422003
:40390000726561647900636F6D6D616E642030782530327800756E64657272756E206166746572202564207061636B65747300636F756E743D256420693D256420643D254F
:403940006400636D645F777269746500703D25642063723D25642063773D256420663D256420773D256420696E6465783D256420756E64657272756E3D25640077726974AE
:40398000652066696E69736865640073746172742065726173696E670073746F702065726173696E670069646C65000051004010004051004030000000014000100014018C
:4039C00040000800400140000A004C0140000200500140200030313233343536373839414243444546000001000000040000001000010000000400000010000028000000C0
:403A0000000104000100000000000000000157494E5553420000303030303100000000000000000012034D005300460054003100300030000100000001000000403A00005A
:403A4000010000000F3B0000000000000000000001000000583A000001000000E13A0000040000007A3A0000000000000000000000000000783A0000FF00000001024000A0
:403A8000FF00000082024000FF00000003034000FF00000084034000FF00020304030904160346006C007500780045006E00670069006E0065002A0343006F0077006C0050
:403AC000610072006B00200054006500630068006E006F006C006F0067006900650073000009022E0001010080320904000004FF0000010705010240000007058202400067
:403B0000000705030340000A0705840340000A12010002FF0001080912006E0100020180014300232D302B2000686C4C00656667454647003031323334353637383961621F
:403B40006364656600000000F8B500BFF8BC08BC9E46704759000000C1100000F8B500BFF8BC08BC9E46704735000000803B0000C880FF1FA0000000E005000000000000B0
:403B8000000000004887FF1FFF000000675000400C00000007000000FFFFFFFF7F8000003F0000000000007D00FA0000400000000090D003FF0000000000000000000000BC
:403BC000000000000000000000000000000000000000000000000000213B000000000000000000000000000000000000000000000000000000000000000000000000000069
:403C00000000000000000000000000000000000000000000000000000081FF1F000000000000000000000000000000000000000000000000000000000000000000000000E5
:403C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044
:403C80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
:403CC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4
@@ -4098,73 +4098,73 @@
:40FF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041
:40FFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
:0200000480007A
:400000000145004006520040015B0040036500400101014005030140450401403C05014044060140470701404D08014054090140440A01404B0B0140470C0140440D01402C
:40004000440E0140330F01400E1501404216014057170140601801405E190140491A0140491B01400C400140114101401242014008430140064401400B4501400E46014012
:400080000F4701400648014008490140184C0140024D014007500140045101407E020841090510806019610A7C402721280A2980397EE60481018310E208E609EE01001D60
:4000C0000101041D05100708080109010A300C010E080F08101D1301161D17021A071B011C0C1E221F042101221D241D2501281D2B012C1D31083307343C360337103902BD
:400100003B083E503F41580459045C905F0182028320873F893F8A048D3F92019304940197029A019B089C019D01A001A33FA53FA601A801AB3FAF10B207B53FBA08BF10EB
:40014000D804D904DC09DF01002802800301040207080A500B0A0D280F421004114A14801510162018021A081D081F042020214422012330270829102A202BA02D812F24CE
:40018000312032463440362A3A843B123C083D103E103F4146804702814086018B209A049F02A101A310B302B604C05FC2FFC47FCAF7CCFFCEFFE208E402E611EA04EE8292
:4001C000000103200401073F08010B040E020F021001133F153F16011801193F1D011E012204233F2401253F28012B082F1032073607373F38883F40580459045C095F0186
:4002000080308102840C85028640888089088B018C808D0290809102943D950296C0988099039B049C569D1C9F03A080A102A480A702A910AA03ACA9AD02B11FB2FFBE04B0
:40024000BF01D804D904DF010028010103010450069008800A500B0A0C510F10115812401506171018201E301F802101254028042A022B122C012D012F28310833A1345019
:400280003618370139083A413B203C083E203F41884089048A168B50910893089541965097439A409CC09D109F03A010A108A310A404A524A6AAA7A1A980AA40B004B108CB
:4002C000B240C0FFC2FFC47FCAFFCCFFCEFFE640EA04EC02EE0100090105040905050801090F0A300B100D130F20100F1105121014021510180919051A201D2C1F0223056F
:400300002505260929052D082F02300132043438353F36023E403F104005450C46E0480949FF4AFF4BFF50045601580459045A045B045C095D095F0162C08102850386019C
:400340008774880189038B0C8F01980199109D109E029F40A119A362A401A801AD10AF28B203B57FB920BA08D804D904DC99DF0101280518068009100A020D080E800F887A
:4003800010241610182019081DD81E801F402004261028402A402D422E18326036803716380639803B203C083DA24F8856206C466D566E146F1074C57506760E770A784079
:4003C0007A027C807F0188478E20900391809282932094AC954298019A409B249C909D6E9E9E9F11A122A202A30AA4A8A5C5A604AA30AB10AF40B002B101B360B410B601C7
:40040000C076C273C426CAF9CCFCCEFFD210E2A0E6E0EA01EC20EE80013F0201040107200801093F0C010E020F081001133F1401170218011B101C011E021F7F2001210199
:4004400023402601270428012B3F2D3F2E01353F360337403E403F50580459045F01830185068B068D038F08910694029507980299069F01A101A30CA401A506A701A802F3
:40048000A901AB06AF02B001B50FB602BAC0BE01BF10D608D804D904DB04DC09DD90DF01000202050310080409410B040E28108811401210152016201A021C011D021F406F
:4004C00020022220261029022A982C292F4030053184331034103548370138A83A023B043DAA5E105F40640867016F02860188018D08900291A09281932094AC97019A60F7
:400500009B049C889D269E9A9F10A138A202A308A402A580AE40B010B448B610C00FC26FC46FCAFFCCFFCEFFD630D830E422E611E820EA04EE90010103CA050F07200C01C1
:400540000D020E080F051002130F15801A021D021F34250F2608271028043004313832013340340635803608370738803B803E453F10580459045B045C995F018284830835
:4005800084C3863C8720893F8C508D3F8EAD9248933F942F96D097029B109F3FA101A202A704AB3FAD3FAE01B01FB2E0B53FB802BE04BF10D201D618D804D904DB04DC0995
:4005C000DD90DF0100060242030207010AC00B200D020E0811801302141015101B0A1D081E891F202110240225702628274429022A982D302F10300231843310360A37400F
:4006000038A83A023C043D823F0158805C405E20630269806B026E106F01822087019240932094049A209D209F02A001A102A210A501A722AF54C08DC25CC469CA4FCCDFA1
:40064000CEDFD638D808E208EA0AEE03040F05390620070409390B020E0F10011206140F150816101716180119201A321B091D081F302C042E092F39300733073438373815
:400680003A023B80580459045C995F018004810A82018406860188208C048D019305950D980199109A029DD0A040A410A750A808A9A0AE20B010B130B208B3C0B407B503B4
:4006C000B660B70CBE05D608D804D90BDB04DC99DD90DF010004030204040680070A0A440B200E0811801402164817041A441E2A1F11200221082240254227782A802B0268
:400700002D202F2031083240331034023601376838043B203D803F015F54666867016C016F047D0280018F01C0F5C24EC4F1CA68CCFECE96D670D870DE808E408F0296403B
:40074000A702A810A904AA01AE05B444B502B701E80AEA04EE020009070109010C010F041101140118011B021C012204230125012B012D012E023407360837073B80580459
:4007800059045C995F01800F813284038532860C880889328D328E029102920193609502960F971099339A089B049C089D019F38A008A11FA340A408A732A804A933AB0CAA
:4007C000AC08AD32B40FB570B70FBE10BF50D608D804D904DB04DD90DF010008014203080440074009040A480B010E25108412101340158218041C081D101E051F102140D9
:400800002220270129122B122C842F21310833A136203701382039083A423D803E14584060026B0280028340844089018B018D408E029108921893419440954096409722E5
:4008400098049A509D109E039F03A080A148A210A3B8A404A504A702A890AA38AB18AC05AD31AE80AF21B220B410B680B701C09FC2EFC49FCAFFCCAFCE7FD608D808E4015D
:40088000E608E801EA0EEE0902020413050108030C0312041504160819041A031C032213240326102A012C032D02300F310232103301340337043B803E143F054032450212
:4008C000480149FF4AFF4BFF4D204EF05110580459045A045B045C995D095F01610862406340648066406740820284028C028D029001940298029C039D01A002A603A8029E
:40090000AC02B102B301B603BE40BF05C025C106C203C5E0C640C80AC9FFCAFFCBFFCD20CEF0CF01D020D110D804D904DA04DB04DD09DF01E108E440E520E680E708E840C7
:40094000E920EB08EE40EFA800880102041005080781084009400A140B800C400D240F8011421214169017601A021D091E4821012310268127112F023240361839803E40A2
:400980003F48400443084480450A47104A024B224F0852205A405B405C8069806C016D80812083048A018B948E8090059154921493A0950297429801990A9A849B249C0485
:4009C0009D209E109F01A04CA1A3A21AA30AA420A544A6A4A808A911AA80AB08AD08AE04AF40B090B340B618C0FDC2FFC4FFCA10CC68CE48D066D20CD610E260E424E60827
:400A0000EC40EE900208030404080701080809060C080F01100811061511160F1726180119401B061C041D7F210622022378240825072708280329562A0C2B212C0F2F0299
:400A4000337F360F3E403F04580459045B045F01807F8308840F86108702880E89038A708C0E8D0392089421964E97039A0E9B019D039E01A103A204A42EA503A641AA011E
:400A8000AB03AE02AF04B30FB50FB67FBE40D804D904DC90DF0100880102020404020508070909A50C080DA00E4010041184128014011512161019801C0221042410250420
:400AC0002708280529092A102C282D802E0230483120330136803724381139063B803C123D803F046A8089088A028F0890039114924093849410950896809841990B9A141D
:400B00009B25A06CA1E1A280A504AA41AC24AE10B401B740C0FFC2FFC4FFCAFFCC7FCEFFE640EA40EC41EE021A801F0832403308348036013B408140C630CCF0CE10E620BB
:400B400030803302358037023A013D1084808510914097409C80AA01CCF0CE60E210E610EE80534055088008830287408D08914097409E019F02A980AC80B302D460E290E1
:400B8000E680EA20EE408E01914097409E01A008A580AD80EC4014407E018E02C404DE04E0025C0287409502968698409A029D80AA40AD81AE04D6011A8082018601950267
:400BC00096C7978098409A029C029D80AA40B201C608EE010A010B800E4295029645978098409A029D80A502A601A902B002C20FE804258091409740A008A580C820700816
:400C00007D409140A008AF40DC80DE20EE40058009020D010E041F10528056025A805E01828084408A019502960498409A029D80A502C001C20DC601D405D605E401AA4031
:400C4000AF1001010B010D010F0111011B011D0100FF01AB02021105BF0000A09F001F000000000000000000100000004000000000000000C0000000FF0000B84700470006
:400C8000000100008000000080008000000000002700180127001801000400000005000000000000000000000000000000000000000000000000000000000000000000002A
:400CC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4
:400D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3
:400D40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073
:400D80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033
:400DC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3
:400E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B2
:400E40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072
:400E80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032
:400EC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2
:400F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1
:400F40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071
:400F80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031
:400FC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F1
:4010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0
:401040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070
:401080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030
:400000000145004008520040015B0040016400400165004045000140380101404F020140550301404404014051050140490601404D0701404308014055090140400A014093
:40004000520B0140450C0140540D0140490E0140360F0140411401405515014056160140551701404818014057190140461A0140591B01400B400140114101400E4201409D
:400080000E430140044401400B45014009460140104701401048014012490140154C0140074D014008500140045101407E0208410904108018031902600361197C40272154
:4000C0003301270A020103070404060B091F0A010E011140120215041601171019021A011B181C031E0C1F1821042201230826012720280929182A042D182E012F01313FF9
:400100003207334034083E043F045608580459045B045C995D905F0181018202860388028C04900293019402970298029B019C03A002A402A704A801AC02B403B507B60450
:40014000B920BE50D804D904DB04DC90DF0100A002A005200761082009080A410D200E020F5010A41140130214811510162019081A081E081F8021052202263027042804BC
:4001800029012B112D0830823228350136203708382039023E013F02584061406540670268026F01820289408F80C0FFC2FFC4FFCA4FCCEFCE85D608D808E001E604023F09
:4001C0000302043F07010A200B010C010D0111011202143F19011A101E3F22082304243F25012A3F2B012E043507363F37073BA03E40580459045C905F018001820886D3F2
:400200008C108E4290129280950C9610980A99039A059B089D019F0EA013A220A4F2A604A811A90EAAE2AB01B008B107B308B407B6F0B902BA20BE01BF05C034C9FFCAFF06
:40024000CBFFD004D601D804D904DA04DB04DC09DD09DF01E080E240E440E56400020220030204080522060208080A440DA00F501044130814911608172019411A071B022A
:400280001F80210525D02701280429102C102D102F8030403140322436113D823E083F1041055C205E10685069406A106B107020710C73028110828084508D048E4892088D
:4002C000930294209550964197549B049CA59D259E209F6AA224A340A470A528A689A710AB40AD04AE10B040B304B504C0FDC2FEC4FECAE4CCAECEF0D003E00BE284E80842
:40030000EA04EC08EE06010A0431050D06C20DD00E101222151018011A081C0A1E051F502033224023052480250126332CF22DA02E043008313033C034F035033607370C01
:400340003A803E01580459095C995F01827F843F87028A208B108C018D118E40903F91019602970499119A109E3FA208A320A43FA511AA3FAD19AE04B040B23FB307B5303A
:40038000B708BB20BE05D804D904DC90DF0103220408052206020A490D200F5110421220149116081720188019101A411B201E801F08204221012204230424082550261851
:4003C000272028202A402B402E082F8132443410360538403B063DA846024740792081108A108C40920293029428951096409754984099019A809B159C919D329E229F6877
:40040000A224A342A401A521A611A710AA10AB02AC28AE80B201B302B540C0F5C2FBC4FDCADBCCEACE7BDE04E405E807EC01EE0A000101020310040105320602080109335C
:400440000B040C010F32111F1201134014011533170C180119321C011D321E022001213225012601273829322A012C012D022F603170330F36033E403F05580459045F0191
:400480008001814084018707891F8A018D048F109118930195029604971898019B189E019F40A104A308A602A720A801A918AD80AE01B207B53FB7C0BA08D804D904DC9984
:4004C000DF01010802080340040805200601078008500A200D200E820F1010211120148216201720181019081A101F80200C2240250529112A402B102C102D012E90324100
:40050000331436A938A439023D603E083F0188128A848C1090A891029202930195109680975099119A809B359C919D229E62A110A258A310A525A601A780A812AB19AC21C1
:40054000AD10B208B308C0FEC2F7C4F7CAFFCCFFCEFFE201E401E684EA07EE010018011D020106180707080409010A100B080C1F0D1D1040111D151D160718181B1D1D0154
:400580001E201F302002211D221824C0271D291D2C042D0C2E082F223080323F3440353C364037033E503F50580459045C095F018101850189018F029203930495019901E6
:4005C0009C019D01A301A901AF01B401B507B602B920BE10D608D804D904DB04DC99DD90DF0104080640070508010A020E620F081440160117081A021B201D401E601F9055
:40060000200822202510270229012B0A2D402E202F603088322234863620382039403A0A3D083E103F8659085B50600861046280654067026801834088048C8090099218F0
:400640009310946495049780984199829A619B0D9C089D459E0A9F02A104A209A305A48FA690A770A908AA41AC01AF08B221B310B420C0F0C2F9C4B0CAFDCCFFCEFFD60EC5
:40068000D80EE010E221E684E820EC8200010108050809080F021308150819011D08230F250F280229032B0C2D043201330F34023E143F04580459045B045F0181498201A8
:4006C0008549860189018A018D408E018F3090019302940195489710980199019E019F01A201A349A601A704AA01AB01AD48AE01AF20B307B540B601B738BB08BE40D60825
:40070000D804D904DB04DC90DD90DF0100020480052206100C400E400F181004141015A119101B081D801E022208254C271829402A202B502C0A2E012F1030883101332004
:400740003540371A38203A0A3B803C083D803F2259105B405CA064056C016D406E406F01808083048B018D048F44908991A19218931094469544985099A29A519C09A580BF
:40078000A691A704A8CAAA01AC01AD12B014B120B248B310B502C0F8C2F0C4F2CAFFCCFFCEFFD63CD830E080E410E860EC80EE0201030201031C050C060107030A010B0ACA
:4007C0000D030E010F101201160118011E012201230F260127202801290F2E012F05313F34013B023E10580459045C905F018034810283048402871089028E028F02900482
:4008000091019308950A96019705980299039D109E28A102A614A703A903AF20B030B307B403B530B60CB708BB08BF40D608D80BD904DB04DC99DD90DF01000401800380CE
:4008400005220610070208080A880B010C480D020F081304141415011602174019401A881B821F1020022148230627402A012B252C462F1030013168382239803B043D409F
:400880003E223F084C0C588063037A80800182108302850186108C108D208E209460954496089710984099809C089E33A320A402A582A619A704A902AB10AC40AF20B2040D
:4008C000B480C0FDC2FFC4F4CAFFCC0FCEFFD608D808DE01E010E280E440E818EA80EC20EE0201040308070709040B100D1F0E02131815181601170118021F2021022318E4
:400900002918353F3603580459045C995F01818082078518880489048A108B108C1F8D1F9320945895189681970198989A409B409E209F18A0C2A102A218A318A540A6187D
:40094000AB07AC04AD04AE08AF08B2C0B3C0B53FB63FB780BE04BF40C203C5E0C802C9FFCAFFCBFFCF83D804D904DA04DB04DC99DD09DF01018004A108080A080E020F1820
:400980001440161119801C011D081E01230424022520271028402B042C462E043182320834803609371038A039403A013B043D403E203F0A4404452846044D025C405D045D
:4009C0005E2166066705800183018B01C0D1C2E6C4B0CAF5CCFBCEFFD040D6F0D8F0E0C00001062009050A3F0B0A0D0A0E100F0512021604183F1C3F1F03223F243F2A3FC6
:400A00002E083101323F33083502370439AA3E043F555608580459045B045D905F01800F8301860F8703880889038D038E08900893029408950399039A019C049F08A103BD
:400A4000A202A403A60CA703A808A903AC08AF04B00FB303B50FBE01BF04D804D904DC90DF01002A03020408052006020740088009100B500C400E080F501051120815014F
:400A80001608178418201F01229123202408250826202C102D012F0932403668370539903C403D203F0959806240699080808218840585208622872088018A018B908C4032
:400AC0008D208E048F0291019280934194289710985099809B419C819D209E629F80A010A110A248A30CA401A528A6A0A702A980AC02B340C0FFC2FFC4FFCAF0CCF8CEFCC5
:400B0000D608D808E228E404E60BEA0E0003010602080506060208060B040C060D400F06111112011326140715561721180119061A061B781D7F1E01200623012401260CF1
:400B40002702280629072A012B082E062F01360F377F3E403F40580459045F0180018102863F89018A208E10903F95019604987F9E08A101A23FA43FA640AA7FAE02B102EC
:400B8000B23FB301B440BB0CBE14BF01C064C720C820C9FFCAFFCBFFCD20CEF0D110D804D904DA04DB04DC90DD09DF01E108E240E340E480E640E7400002012803020508A5
:400BC00006080742088109100B180C520E201050120813401549172019101A201F8020202105220426402B802C402D082F06310834023628374038223C203D413E08410176
:400C000049105001660167406A80820183488501868088108A088C058F0291409301950196289750985299089B219C819D209E6B9FC0A110A218A304A520A621A820AC4071
:400C4000AD12B004B540B704C0FFC2FFC4FFCAF1CCF2CEF5D001D204E208E661EA01EC40EE08012C0228030204800505083409050A080C3F0D130F20120713051438150576
:400C800016011808190F1A101B101D051E40200221052238251029052C042D082E302F02307F3280353F3E043F105608580459045B045C095D905F018102850289088B0152
:400CC0008D028E0490019102950296029806991C9B039D10A102A702A902AD03AF04B001B11FB406BE01BF01D80BD904DB04DC09DF01018004080502070508090A080D0298
:400D00000E020F181440160118041A401C401D021F042202261028842B212C082E022F2231043221338035013624374038013A203B843D603E095A405F40640169406B02CA
:400D40006C046D807A8083128744880489088A018C068D0490019218933694649540978098C899829A219B0D9C069D099E0AA2A9A3A5A48AA602A75AA910AF80B104B7304D
:400D8000C0F1C2FEC490CAFFCCFFCEFFD618D810DE01E050E220E488E660E820EA40EC4002080301060307010803092E0B410C030D7F1003110E13701602170819211A038B
:400DC0001B4E1C031D0E200323022601270E2A042B042D0F2F10360F377F3F40580459045C095F0183038401858089808D80918094019580993D9BC09D80A1A9A530A90CC9
:400E0000AB40AD56B3FFB601BA80BF04C003C7CEC830C9FFCAFFCBFFD004D601D804D904DA04DB04DC09DD09DF01E2C0000201500320072008100A120B800E20110112088F
:400E4000130418021A021B401D801E011F402002272028842B212D502E202F5030103184322134863620380839403A203B023D013E103F864708540255086C946D206E0A04
:400E80006F4A741C7503760A770182018502870A88108B018C11914092109326942096039780988699049A209B089D019E0A9F40A238A321A48EA518A604A74AAC80AD400F
:400EC000AF40B004B108C02FC22FC40ECAFFCCFFCEFFD040E240E404E6E0EA24EE021B011F083388350836803B408380C630CCF0CE10E62031083280358037023B043C400C
:400F00008080890890409D08A840AE80AF41CCF0CE60E220EE6053045610830297049DA0A080A508A680A920AF02D460E480EC80EE408010810882808980970C9DA09E1000
:400F40009F02A080A508A680E280E480E62014408C20C404E0025F028B0192019820A404AC04AE01B040D601E201EA011B01920198209C109F02A404A701AC10C6080910EC
:400F80000A200C14811082108804920198209C10A404A604AF02B604C20FE601EA0220102608270287048B048F029410970C9D209E109F02A080A608B608C8E0E6101920F8
:400FC0005480570271087404850888049D20A080A302AE10C640D440D620DC80DE20E240EA40052008080C020E081C085380572058205E0187208F8092019820A404A604D3
:40100000C001C20DC601D407D601E00270018001A802AD20B008DC01EA01010109010B010D010F0111011B011D0100FF01AB020211050000BF0000A09F001F000000000078
:4010400000000000100000004000000000000000C0000000FF0000B8470047000001000080000000800080000000000000030300030000002700180127001801000400000D
:40108000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B
:4010C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0
:4011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AF
:40114000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F
@@ -4615,12 +4615,12 @@
:0200000490105A
:04000000BC90ACAF55
:0200000490303A
:020000002C17BB
:020000006B692A
:0200000490402A
:4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0
:400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080
:400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040
:4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
:0200000490501A
:0C00000000012E16106900002E303C801C
:0C00000000012E16106900002E317BD28A
:00000001FF

View File

@@ -0,0 +1,27 @@
#include "cyfitter_cfg.h"
#include "cydevice_trm.h"
#include "cyfitter.h"
#include "`$INSTANCE_NAME`_h.h"
void `$INSTANCE_NAME`_Start()
{
`$INSTANCE_NAME`_Init();
}
void `$INSTANCE_NAME`_Stop()
{
`$INSTANCE_NAME`_Disable();
}
void `$INSTANCE_NAME`_Init()
{
`$INSTANCE_NAME`_Enable();
}
void `$INSTANCE_NAME`_Enable()
{
}
void `$INSTANCE_NAME`_Disable()
{
}

View File

@@ -0,0 +1,50 @@
#if !defined(`$INSTANCE_NAME`_H)
#define `$INSTANCE_NAME`_H
#include "cytypes.h"
#include "cyfitter.h"
#include "CyLib.h"
#define `$INSTANCE_NAME`_FIFO_PTR ((reg8 *) `$INSTANCE_NAME`_dp__F0_REG)
/* Macros to clear DP FIFOs.*/
#define `$INSTANCE_NAME`_CLEAR do { \
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0x01u | \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)));\
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0xfeu & \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)));\
} while(0)
/* Macros to set FIFO level mode. See the TRM for details */
#define `$INSTANCE_NAME`_SET_LEVEL_NORMAL \
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0xfbu & \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)))
#define `$INSTANCE_NAME`_SET_LEVEL_MID \
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0x04u | \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)))
/* Macros to set FIFO to single-buffer mode. */
#define `$INSTANCE_NAME`_SINGLE_BUFFER_SET \
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0x01u | \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)))
/* Macros to return the FIFO to normal mode. */
#define `$INSTANCE_NAME`_SINGLE_BUFFER_UNSET \
CY_SET_XTND_REG8(\
((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG), 0xfeu & \
CY_GET_XTND_REG8(((reg8 *) `$INSTANCE_NAME`_dp__DP_AUX_CTL_REG)))
void `$INSTANCE_NAME`_Enable();
void `$INSTANCE_NAME`_Disable();
void `$INSTANCE_NAME`_Start();
void `$INSTANCE_NAME`_Stop();
void `$INSTANCE_NAME`_Init();
#endif
/* [] END OF FILE */

View File

Binary file not shown.

View File

@@ -0,0 +1,128 @@
//`#start header` -- edit after this line, do not edit this line
`include "cypress.v"
//`#end` -- edit above this line, do not edit this line
/* Ultra-simple FIFO in component: a byte is shifted in every clock when req
* is high. */
module FIFOin (drq, clk, d, req);
output drq;
input clk;
input [7:0] d;
input req;
//`#start body` -- edit after this line, do not edit this line
wire [7:0] pi;
assign pi = d;
wire load;
assign load = req;
cy_psoc3_dp #(.cy_dpconfig(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM0: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM1: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM2: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM3: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM4: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM5: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM6: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM7: */
8'hFF, 8'h00, /*CFG9: */
8'hFF, 8'hFF, /*CFG11-10: */
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*CFG13-12: */
`SC_A0_SRC_PIN, `SC_SHIFT_SL, 1'h0,
1'h0, `SC_FIFO1_BUS, `SC_FIFO0_ALU,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*CFG15-14: */
10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO__SYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*CFG17-16: */
}
)) dp(
/* input */ .clk(clk),
/* input [02:00] */ .cs_addr(3'b0), // Program counter
/* input */ .route_si(1'b0), // Shift in
/* input */ .route_ci(1'b0), // Carry in
/* input */ .f0_load(load), // Load FIFO 0
/* input */ .f1_load(1'b0), // Load FIFO 1
/* input */ .d0_load(1'b0), // Load Data Register 0
/* input */ .d1_load(1'b0), // Load Data Register 1
/* output */ .ce0(), // Accumulator 0 = Data register 0
/* output */ .cl0(), // Accumulator 0 < Data register 0
/* output */ .z0(), // Accumulator 0 = 0
/* output */ .ff0(), // Accumulator 0 = FF
/* output */ .ce1(), // Accumulator [0|1] = Data register 1
/* output */ .cl1(), // Accumulator [0|1] < Data register 1
/* output */ .z1(), // Accumulator 1 = 0
/* output */ .ff1(), // Accumulator 1 = FF
/* output */ .ov_msb(), // Operation over flow
/* output */ .co_msb(), // Carry out
/* output */ .cmsb(), // Carry out
/* output */ .so(), // Shift out
/* output */ .f0_bus_stat(drq), // not empty
/* output */ .f0_blk_stat(full),// full
/* output */ .f1_bus_stat(), // FIFO 1 status to uP
/* output */ .f1_blk_stat(), // FIFO 1 status to DP
/* input */ .ci(1'b0), // Carry in from previous stage
/* output */ .co(), // Carry out to next stage
/* input */ .sir(1'b0), // Shift in from right side
/* output */ .sor(), // Shift out to right side
/* input */ .sil(1'b0), // Shift in from left side
/* output */ .sol(), // Shift out to left side
/* input */ .msbi(1'b0), // MSB chain in
/* output */ .msbo(), // MSB chain out
/* input [01:00] */ .cei(2'b0), // Compare equal in from prev stage
/* output [01:00] */ .ceo(), // Compare equal out to next stage
/* input [01:00] */ .cli(2'b0), // Compare less than in from prv stage
/* output [01:00] */ .clo(), // Compare less than out to next stage
/* input [01:00] */ .zi(2'b0), // Zero detect in from previous stage
/* output [01:00] */ .zo(), // Zero detect out to next stage
/* input [01:00] */ .fi(2'b0), // 0xFF detect in from previous stage
/* output [01:00] */ .fo(), // 0xFF detect out to next stage
/* input [01:00] */ .capi(2'b0), // Capture in from previous stage
/* output [01:00] */ .capo(), // Capture out to next stage
/* input */ .cfbi(1'b0), // CRC Feedback in from previous stage
/* output */ .cfbo(), // CRC Feedback out to next stage
/* input [07:00] */ .pi(pi), // Parallel data port
/* output [07:00] */ .po() // Parallel data port
);
//`#end` -- edit above this line, do not edit this line
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line

View File

@@ -25,5 +25,3 @@ void `$INSTANCE_NAME`_Enable()
void `$INSTANCE_NAME`_Disable()
{
}
/* [] END OF FILE */

View File

@@ -20,8 +20,8 @@ module FIFOout (
wire [7:0] po;
assign d = po;
localparam STATE_WAITFORREQ = 1'b0;
localparam STATE_READ = 1'b1;
localparam STATE_WAIT = 1'b0;
localparam STATE_READ = 1'b1;
reg state;
reg oldreq;
@@ -31,7 +31,7 @@ assign ack = (state != STATE_READ);
always @(posedge clk)
begin
case (state)
STATE_WAITFORREQ:
STATE_WAIT:
begin
if (!empty)
begin
@@ -45,7 +45,7 @@ begin
STATE_READ:
begin
state <= STATE_WAITFORREQ;
state <= STATE_WAIT;
end
endcase
end

View File

@@ -52,6 +52,30 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="3f3708ae-fb62-4012-919b-9a3b9a1dfbc2">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_DIVIDER" />
<Data key="desired_freq" value="0" />
<Data key="desired_unit" value="15" />
<Data key="divider" value="0" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="Clock_8" />
<Data key="named_src_direct_connect" value="True" />
<Data key="netlist_name" value="Clock_8" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="75C2148C-3656-4d8a-846D-0CAE99AB6FF7" />
<Data key="src_clk_name" value="BUS_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="4eef02b9-8ad1-43c4-85f1-b3335faa5fc4">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -171,6 +195,54 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="71bc291d-84a7-40a8-b7b2-1c8a34326a31">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_FREQ" />
<Data key="desired_freq" value="300" />
<Data key="desired_unit" value="0" />
<Data key="divider" value="65536" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="CLOCK300" />
<Data key="named_src_direct_connect" value="False" />
<Data key="netlist_name" value="CLOCK300" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="CEF43CFB-0213-49b9-B980-2FFAB81C5B47" />
<Data key="src_clk_name" value="IMO" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="90ce0c72-9f10-44ef-a049-f0f525d59bea">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_FREQ" />
<Data key="desired_freq" value="128" />
<Data key="desired_unit" value="0" />
<Data key="divider" value="65536" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="CLOCK8" />
<Data key="named_src_direct_connect" value="False" />
<Data key="netlist_name" value="CLOCK8" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="CEF43CFB-0213-49b9-B980-2FFAB81C5B47" />
<Data key="src_clk_name" value="IMO" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="349ffa20-8576-4ac3-9a6f-34ef606de6cf">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -194,6 +266,29 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="4033c29d-f4bc-4e94-ac95-aa587e869f88/696a0979-21fc-4185-bf38-6c79febcde7a">
<Data key="check_tolerance" value="False" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="AUTO" />
<Data key="desired_freq" value="1600000" />
<Data key="desired_unit" value="0" />
<Data key="divider" value="40" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="OUTPUT_VOLTAGE_ADC_theACLK" />
<Data key="netlist_name" value="\OUTPUT_VOLTAGE_ADC:theACLK\" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="61737EF6-3B74-48f9-8B91-F7473A442AE7" />
<Data key="src_clk_name" value="MASTER_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="6616e828-6611-4893-a674-66c861d79d6c">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -265,6 +360,53 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="09974428-e912-491f-8d2f-361ba50e7599">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_DIVIDER" />
<Data key="desired_freq" value="0" />
<Data key="desired_unit" value="15" />
<Data key="divider" value="0" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="Clock_6" />
<Data key="named_src_direct_connect" value="True" />
<Data key="netlist_name" value="Clock_6" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="75C2148C-3656-4d8a-846D-0CAE99AB6FF7" />
<Data key="src_clk_name" value="BUS_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="a5825a94-fa18-4e4f-a843-bc687cacbd56/696a0979-21fc-4185-bf38-6c79febcde7a">
<Data key="check_tolerance" value="False" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="AUTO" />
<Data key="desired_freq" value="1600000" />
<Data key="desired_unit" value="0" />
<Data key="divider" value="40" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="INPUT_VOLTAGE_ADC_theACLK" />
<Data key="netlist_name" value="\INPUT_VOLTAGE_ADC:theACLK\" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="61737EF6-3B74-48f9-8B91-F7473A442AE7" />
<Data key="src_clk_name" value="MASTER_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="b762c287-7f87-4b21-982e-84be01dc5115">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -312,6 +454,30 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="b722443b-8f81-46dc-bf9b-c95eb62bc181">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_DIVIDER" />
<Data key="desired_freq" value="0" />
<Data key="desired_unit" value="15" />
<Data key="divider" value="0" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="Clock_1" />
<Data key="named_src_direct_connect" value="True" />
<Data key="netlist_name" value="Clock_1" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="75C2148C-3656-4d8a-846D-0CAE99AB6FF7" />
<Data key="src_clk_name" value="BUS_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="cb7e877c-9fb4-4fc1-a708-f1e48eb5a68c">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -336,6 +502,30 @@
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="d3075dc6-05c8-4dc9-9959-cf7014c0e66f">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
<Data key="derive_type" value="NAMED_DIVIDER" />
<Data key="desired_freq" value="0" />
<Data key="desired_unit" value="15" />
<Data key="divider" value="0" />
<Data key="domain" value="DIGITAL" />
<Data key="enabled" value="True" />
<Data key="minus_accuracy" value="0.25" />
<Data key="minus_tolerance" value="5" />
<Data key="name" value="Clock_7" />
<Data key="named_src_direct_connect" value="True" />
<Data key="netlist_name" value="Clock_7" />
<Data key="placement" value="AUTO" />
<Data key="plus_accuracy" value="0.25" />
<Data key="plus_tolerance" value="5" />
<Data key="scope" value="LOCAL" />
<Data key="src_clk_id" value="75C2148C-3656-4d8a-846D-0CAE99AB6FF7" />
<Data key="src_clk_name" value="BUS_CLK" />
<Data key="start_on_reset" value="True" />
<Data key="sync_with_bus_clk" value="True" />
<Data key="user_set_domain" value="False" />
</Group>
<Group key="e4a53a4c-40e1-4747-a72a-10193ffdf31c">
<Data key="check_tolerance" value="True" />
<Data key="clock_version" value="v1" />
@@ -634,18 +824,26 @@
<Group key="Clock">
<Data key="0b2f9bbb-00ce-4115-a788-ffb9d046a9e5" value="Clock_4" />
<Data key="1a7e8637-3b6b-4e84-839c-0dfc18fdaf5b" value="Clock_5" />
<Data key="3f3708ae-fb62-4012-919b-9a3b9a1dfbc2" value="Clock_8" />
<Data key="4eef02b9-8ad1-43c4-85f1-b3335faa5fc4" value="Clock_3" />
<Data key="06c4d5d4-f15f-4b29-a1d0-c24b2e38b1ec" value="CounterClock" />
<Data key="24cd38f7-f472-4403-837f-86807c8f5333" value="PULSE_CLOCK" />
<Data key="63ed4137-0b09-4256-8a27-35c9a2653f1a" value="Clock_2" />
<Data key="66f14071-bddd-4b4d-a9aa-a129cceaa7b6" value="Clock_3" />
<Data key="71bc291d-84a7-40a8-b7b2-1c8a34326a31" value="CLOCK300" />
<Data key="90ce0c72-9f10-44ef-a049-f0f525d59bea" value="CLOCK8" />
<Data key="349ffa20-8576-4ac3-9a6f-34ef606de6cf" value="Clock_1" />
<Data key="4033c29d-f4bc-4e94-ac95-aa587e869f88/696a0979-21fc-4185-bf38-6c79febcde7a" value="OUTPUT_VOLTAGE_ADC_theACLK" />
<Data key="6616e828-6611-4893-a674-66c861d79d6c" value="SignalSamplingClock" />
<Data key="12664fc6-9d70-44b1-8a49-887a292e1b7f" value="Clock_3" />
<Data key="75187c05-9501-4450-b306-6ccdd3bb77db" value="Clock_5" />
<Data key="09974428-e912-491f-8d2f-361ba50e7599" value="Clock_6" />
<Data key="a5825a94-fa18-4e4f-a843-bc687cacbd56/696a0979-21fc-4185-bf38-6c79febcde7a" value="INPUT_VOLTAGE_ADC_theACLK" />
<Data key="b762c287-7f87-4b21-982e-84be01dc5115" value="Clock_2" />
<Data key="b0162966-0060-4af5-82d1-fcb491ad7619/be0a0e37-ad17-42ca-b5a1-1a654d736358" value="UART_IntClock" />
<Data key="b722443b-8f81-46dc-bf9b-c95eb62bc181" value="Clock_1" />
<Data key="cb7e877c-9fb4-4fc1-a708-f1e48eb5a68c" value="CounterClock" />
<Data key="d3075dc6-05c8-4dc9-9959-cf7014c0e66f" value="Clock_7" />
<Data key="e4a53a4c-40e1-4747-a72a-10193ffdf31c" value="Clock_1" />
<Data key="efd5f185-0c32-4824-ba72-3ceb5356f5a7" value="Clock_1" />
</Group>
@@ -670,10 +868,11 @@
<Data key="c5367cde-21d5-4866-9a32-d16abfea0c61" value="WPT" />
<Data key="d19368c5-6855-41bb-a9ff-808938abef00" value="INDEX" />
<Data key="e9f14b5a-b2bf-49b8-98f3-d7b5a43ace8d" value="DRVSB" />
<Data key="e851a3b9-efb8-48be-bbb8-b303b216c393" value="LED_PIN" />
<Data key="e851a3b9-efb8-48be-bbb8-b303b216c393" value="INDEX300" />
<Data key="e51063a9-4fad-40c7-a06b-7cc4b137dc18" value="DSKCHG" />
<Data key="ea7ee228-8b3f-426c-8bb8-cd7a81937769" value="DIR" />
<Data key="ed092b9b-d398-4703-be89-cebf998501f6" value="UartTx" />
<Data key="f9a7371a-8a7d-4144-8b08-69e3d2a3a663" value="INDEX360" />
<Data key="fbd1f839-40f9-498e-a48b-5f3048ea5c3d/52f31aa9-2f0a-497d-9a1f-1424095e13e6" value="UART_tx" />
<Data key="fede1767-f3fd-4021-b3d7-8f9d88f36f9b" value="DRVSA" />
<Data key="fff78075-035e-43d7-8577-bc5be4d21926" value="WGATE" />
@@ -3946,7 +4145,7 @@
</Group>
<Group key="e851a3b9-efb8-48be-bbb8-b303b216c393">
<Group key="0">
<Data key="Port Format" value="2,1" />
<Data key="Port Format" value="3,0" />
</Group>
</Group>
<Group key="e51063a9-4fad-40c7-a06b-7cc4b137dc18">
@@ -3964,6 +4163,11 @@
<Data key="Port Format" value="12,7" />
</Group>
</Group>
<Group key="f9a7371a-8a7d-4144-8b08-69e3d2a3a663">
<Group key="0">
<Data key="Port Format" value="3,1" />
</Group>
</Group>
<Group key="fbd1f839-40f9-498e-a48b-5f3048ea5c3d/52f31aa9-2f0a-497d-9a1f-1424095e13e6">
<Group key="0">
<Data key="Port Format" value="12,7" />

View File

@@ -1127,20 +1127,20 @@
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA" persistent="">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA_dma.c" persistent="Generated_Source\PSoC5\CAPTURE_DMA_dma.c">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA_dma.h" persistent="Generated_Source\PSoC5\CAPTURE_DMA_dma.h">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
@@ -1153,20 +1153,20 @@
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA_FINISHED_IRQ" persistent="">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA_FINISHED_IRQ.c" persistent="Generated_Source\PSoC5\CAPTURE_DMA_FINISHED_IRQ.c">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_DMA_FINISHED_IRQ.h" persistent="Generated_Source\PSoC5\CAPTURE_DMA_FINISHED_IRQ.h">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
@@ -1382,13 +1382,13 @@
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER" persistent="">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_defs.h" persistent="Generated_Source\PSoC5\SAMPLER_defs.h">
<Hidden v="False" />
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
@@ -2389,41 +2389,84 @@
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_d8451a8e-a4ea-4e21-aba8-966eaa7ea07d>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_d8451a8e-a4ea-4e21-aba8-966eaa7ea07d>
<CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtComponentSerialize" version="1">
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="UdbSampler" persistent="UdbSampler">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin_1" persistent="">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin_1_FIFOIn.c" persistent="Generated_Source\PSoC5\FIFOin_1_FIFOIn.c">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin_1_FIFOIn.h" persistent="Generated_Source\PSoC5\FIFOin_1_FIFOIn.h">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin_1_FIFOIn_PM.c" persistent="Generated_Source\PSoC5\FIFOin_1_FIFOIn_PM.c">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_FIFO" persistent="">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_FIFO_c.c" persistent="Generated_Source\PSoC5\CAPTURE_FIFO_c.c">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CAPTURE_FIFO_h.h" persistent="Generated_Source\PSoC5\CAPTURE_FIFO_h.h">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="UdbSampler.cyudb" persistent="UdbSampler\UdbSampler.cyudb">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA_dma.c" persistent="Generated_Source\PSoC5\SAMPLER_DMA_dma.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="UdbSampler.cysym" persistent="UdbSampler\UdbSampler.cysym">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA_dma.h" persistent="Generated_Source\PSoC5\SAMPLER_DMA_dma.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
@@ -2431,8 +2474,242 @@
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA_FINISHED_IRQ" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA_FINISHED_IRQ.c" persistent="Generated_Source\PSoC5\SAMPLER_DMA_FINISHED_IRQ.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_DMA_FINISHED_IRQ.h" persistent="Generated_Source\PSoC5\SAMPLER_DMA_FINISHED_IRQ.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_FIFO" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_FIFO_c.c" persistent="Generated_Source\PSoC5\SAMPLER_FIFO_c.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SAMPLER_FIFO_h.h" persistent="Generated_Source\PSoC5\SAMPLER_FIFO_h.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK300" persistent="">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK300.c" persistent="Generated_Source\PSoC5\CLOCK300.c">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK300.h" persistent="Generated_Source\PSoC5\CLOCK300.h">
<Hidden v="True" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK8" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK8.c" persistent="Generated_Source\PSoC5\CLOCK8.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="CLOCK8.h" persistent="Generated_Source\PSoC5\CLOCK8.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX300" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX300_aliases.h" persistent="Generated_Source\PSoC5\INDEX300_aliases.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX300.c" persistent="Generated_Source\PSoC5\INDEX300.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX300.h" persistent="Generated_Source\PSoC5\INDEX300.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM300" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM300.c" persistent="Generated_Source\PSoC5\RPM300.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM300.h" persistent="Generated_Source\PSoC5\RPM300.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM360" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM360.c" persistent="Generated_Source\PSoC5\RPM360.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="RPM360.h" persistent="Generated_Source\PSoC5\RPM360.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX360" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX360_aliases.h" persistent="Generated_Source\PSoC5\INDEX360_aliases.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX360.c" persistent="Generated_Source\PSoC5\INDEX360.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="INDEX360.h" persistent="Generated_Source\PSoC5\INDEX360.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e>
</CyGuid_d8451a8e-a4ea-4e21-aba8-966eaa7ea07d>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_d8451a8e-a4ea-4e21-aba8-966eaa7ea07d>
<CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtComponentSerialize" version="1">
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
@@ -2558,6 +2835,138 @@
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e>
<CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtComponentSerialize" version="1">
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin" persistent="FIFOin">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="API" persistent="FIFOin\API">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="c.c" persistent="FIFOin\API\c.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="h.h" persistent="FIFOin\API\h.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin.cydmacap" persistent="FIFOin\FIFOin.cydmacap">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin.cysym" persistent="FIFOin\FIFOin.cysym">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin.pdf" persistent="FIFOin\FIFOin.pdf">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="FIFOin.v" persistent="FIFOin\FIFOin.v">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e>
<CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtComponentSerialize" version="1">
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="Sampler" persistent="Sampler">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="Sampler.cysym" persistent="Sampler\Sampler.cysym">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="Sampler.v" persistent="Sampler\Sampler.v">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e>
<CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtComponentSerialize" version="1">
<CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtPhysicalFolderSerialize" version="1">
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SuperCounter" persistent="SuperCounter">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SuperCounter.cysym" persistent="SuperCounter\SuperCounter.cysym">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="SuperCounter.v" persistent="SuperCounter\SuperCounter.v">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="OTHER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</CyGuid_813b8d13-518a-4dc8-91ba-cda6042dfb52>
</CyGuid_4429d4ed-fe84-42d0-9e9f-19aee0ff4e7e>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@@ -2872,6 +3281,6 @@
</ignored_deps>
</CyGuid_495451fe-d201-4d01-b22d-5d3f5609ac37>
<boot_component v="" />
<current_generation v="69" />
<current_generation v="84" />
</CyGuid_fec8f9e8-2365-4bdb-96d3-a4380222e01b>
</CyXmlSerializer>

View File

@@ -0,0 +1,134 @@
//`#start header` -- edit after this line, do not edit this line
`include "cypress.v"
`include "../SuperCounter/SuperCounter.v"
//`#end` -- edit above this line, do not edit this line
// Generated on 12/11/2019 at 21:18
// Component: Sampler
module Sampler (
output [2:0] debug_state,
output reg [7:0] opcode,
output req,
input clock,
input index,
input rdata,
input reset,
input sampleclock
);
//`#start body` -- edit after this line, do not edit this line
localparam STATE_RESET = 0;
localparam STATE_WAITING = 1;
localparam STATE_INTERVAL = 2;
localparam STATE_DISPATCH = 3;
localparam STATE_OPCODE = 4;
localparam STATE_COUNTING = 5;
reg [2:0] state;
wire [6:0] counter;
wire countnow;
assign countnow = (state == STATE_COUNTING);
wire counterreset;
assign counterreset = (state == STATE_INTERVAL) || (state == STATE_OPCODE);
SuperCounter #(.Delta(1), .ResetValue(0)) Counter
(
/* input */ .clk(clock),
/* input */ .reset(counterreset),
/* input */ .count(countnow),
/* output */ .d(counter)
);
reg oldsampleclock;
wire sampleclocked;
assign sampleclocked = !oldsampleclock && sampleclock;
reg oldindex;
wire indexed;
assign indexed = !oldindex && index;
wire rdataed;
reg oldrdata;
assign rdataed = !oldrdata && rdata;
assign req = (state == STATE_INTERVAL) || (state == STATE_OPCODE);
always @(posedge clock)
begin
if (reset)
begin
state <= STATE_RESET;
opcode <= 0;
oldsampleclock <= 0;
oldindex <= 0;
oldrdata <= 0;
end
else
case (state)
STATE_RESET:
state <= STATE_WAITING;
STATE_WAITING:
begin
if (rdataed || indexed)
begin
opcode <= {0, counter};
state <= STATE_INTERVAL;
end
else if (sampleclocked)
begin
oldsampleclock <= 1;
if (counter == 7'h7f)
begin
opcode <= {0, counter};
state <= STATE_OPCODE;
end
else
state <= STATE_COUNTING;
end
if (oldrdata && !rdata)
oldrdata <= 0;
if (oldindex && !index)
oldindex <= 0;
if (oldsampleclock && !sampleclock)
oldsampleclock <= 0;
end
STATE_INTERVAL: /* interval byte sent here; counter reset */
state <= STATE_DISPATCH;
STATE_DISPATCH: /* relax after interval byte, dispatch for opcode */
begin
if (rdataed)
begin
oldrdata <= 1;
opcode <= 8'h80;
state <= STATE_OPCODE;
end
else if (indexed)
begin
oldindex <= 1;
opcode <= 8'h81;
state <= STATE_OPCODE;
end
else
state <= STATE_WAITING;
end
STATE_OPCODE: /* opcode byte sent here */
state <= STATE_WAITING;
STATE_COUNTING:
state <= STATE_WAITING;
endcase
end
//`#end` -- edit above this line, do not edit this line
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line

View File

@@ -92,6 +92,8 @@ begin
STATE_INDEXING:
if (indexed)
state <= STATE_LOAD;
else
state <= STATE_INDEXING;
endcase
end

View File

Binary file not shown.

View File

@@ -0,0 +1,156 @@
//`#start header` -- edit after this line, do not edit this line
`include "cypress.v"
//`#end` -- edit above this line, do not edit this line
// Generated on 11/16/2017 at 15:44
// Component: FIFOout
module SuperCounter (
input clk,
input reset,
input count,
output [7:0] d,
output drq,
output empty,
output ack
);
//`#start body` -- edit after this line, do not edit this line
parameter ResetValue = 0;
parameter Delta = 1;
wire [7:0] po;
assign d = po;
localparam STATE_RESET = 0;
localparam STATE_WAIT = 1;
localparam STATE_ADD = 2;
reg oldcount;
wire counted;
assign counted = count && !oldcount;
always @(posedge clk) oldcount <= count;
wire [2:0] cs;
assign cs = reset ? STATE_RESET : (counted ? STATE_ADD : STATE_WAIT);
cy_psoc3_dp #(.d0_init(ResetValue), .d1_init(Delta),
.cy_dpconfig(
{
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC___D0, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM0: STATE_RESET*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC__ALU, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM1: STATE_WAIT*/
`CS_ALU_OP__ADD, `CS_SRCA_A0, `CS_SRCB_D1,
`CS_SHFT_OP_PASS, `CS_A0_SRC__ALU, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM2: STATE_ADD*/
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM3: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM4: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM5: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM6: */
`CS_ALU_OP_PASS, `CS_SRCA_A0, `CS_SRCB_D0,
`CS_SHFT_OP_PASS, `CS_A0_SRC_NONE, `CS_A1_SRC_NONE,
`CS_FEEDBACK_DSBL, `CS_CI_SEL_CFGA, `CS_SI_SEL_CFGA,
`CS_CMP_SEL_CFGA, /*CFGRAM7: */
8'hFF, 8'h00, /*CFG9: */
8'hFF, 8'hFF, /*CFG11-10: */
`SC_CMPB_A1_D1, `SC_CMPA_A1_D1, `SC_CI_B_ARITH,
`SC_CI_A_ARITH, `SC_C1_MASK_DSBL, `SC_C0_MASK_DSBL,
`SC_A_MASK_DSBL, `SC_DEF_SI_0, `SC_SI_B_DEFSI,
`SC_SI_A_DEFSI, /*CFG13-12: */
`SC_A0_SRC_ACC, `SC_SHIFT_SL, 1'h0,
1'h0, `SC_FIFO1_BUS, `SC_FIFO0_BUS,
`SC_MSB_DSBL, `SC_MSB_BIT0, `SC_MSB_NOCHN,
`SC_FB_NOCHN, `SC_CMP1_NOCHN,
`SC_CMP0_NOCHN, /*CFG15-14: */
10'h00, `SC_FIFO_CLK__DP,`SC_FIFO_CAP_AX,
`SC_FIFO_LEVEL,`SC_FIFO_ASYNC,`SC_EXTCRC_DSBL,
`SC_WRK16CAT_DSBL /*CFG17-16: */
}
)) dp(
/* input */ .reset(1'b0),
/* input */ .clk(clk),
/* input [02:00] */ .cs_addr(cs),
/* input */ .route_si(1'b0),
/* input */ .route_ci(1'b0),
/* input */ .f0_load(1'b0),
/* input */ .f1_load(1'b0),
/* input */ .d0_load(1'b0),
/* input */ .d1_load(1'b0),
/* output */ .ce0(),
/* output */ .cl0(),
/* output */ .z0(),
/* output */ .ff0(),
/* output */ .ce1(),
/* output */ .cl1(),
/* output */ .z1(),
/* output */ .ff1(),
/* output */ .ov_msb(),
/* output */ .co_msb(),
/* output */ .cmsb(),
/* output */ .so(),
/* output */ .f0_bus_stat(),
/* output */ .f0_blk_stat(),
/* output */ .f1_bus_stat(),
/* output */ .f1_blk_stat(),
/* input */ .ci(1'b0), // Carry in from previous stage
/* output */ .co(),// Carry out to next stage
/* input */ .sir(1'b0), // Shift in from right side
/* output */ .sor(), // Shift out to right side
/* input */ .sil(1'b0), // Shift in from left side
/* output */ .sol(), // Shift out to left side
/* input */ .msbi(1'b0), // MSB chain in
/* output */ .msbo(), // MSB chain out
/* input [01:00] */ .cei(2'b0), // Compare equal in from prev stage
/* output [01:00] */ .ceo(), // Compare equal out to next stage
/* input [01:00] */ .cli(2'b0), // Compare less than in from prv stage
/* output [01:00] */ .clo(), // Compare less than out to next stage
/* input [01:00] */ .zi(2'b0), // Zero detect in from previous stage
/* output [01:00] */ .zo(), // Zero detect out to next stage
/* input [01:00] */ .fi(2'b0), // 0xFF detect in from previous stage
/* output [01:00] */ .fo(), // 0xFF detect out to next stage
/* input [01:00] */ .capi(2'b0), // Software capture from previous stage
/* output [01:00] */ .capo(), // Software capture to next stage
/* input */ .cfbi(1'b0), // CRC Feedback in from previous stage
/* output */ .cfbo(), // CRC Feedback out to next stage
/* input [07:00] */ .pi(8'b0), // Parallel data port
/* output [07:00] */ .po(po) // Parallel data port
);
//`#end` -- edit above this line, do not edit this line
endmodule
//`#start footer` -- edit after this line, do not edit this line
//`#end` -- edit above this line, do not edit this line

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -85,10 +85,21 @@ static void print(const char* msg, ...)
UART_PutCRLF();
}
static void set_drive_flags(uint8_t flags)
{
if (current_drive_flags != flags)
homed = false;
current_drive_flags = flags;
DRIVESELECT_REG_Write((flags & 1) ? 2 : 1); /* select drive 1 or 0 */
DENSITY_REG_Write(flags >> 1); /* density bit */
}
static void start_motor(void)
{
if (!motor_on)
{
set_drive_flags(current_drive_flags);
MOTOR_REG_Write(1);
CyDelay(1000);
homed = false;
@@ -104,6 +115,7 @@ static void stop_motor(void)
if (motor_on)
{
MOTOR_REG_Write(0);
DRIVESELECT_REG_Write(0); /* deselect all drives */
motor_on = false;
}
}
@@ -265,7 +277,7 @@ static void deinit_dma(void)
static void init_capture_dma(void)
{
dma_channel = CAPTURE_DMA_DmaInitialize(
dma_channel = SAMPLER_DMA_DmaInitialize(
2 /* bytes */,
true /* request per burst */,
HI16(CYDEV_PERIPH_BASE),
@@ -280,8 +292,8 @@ static void init_capture_dma(void)
nexti = 0;
CyDmaTdSetConfiguration(td[i], BUFFER_SIZE, td[nexti],
CY_DMA_TD_INC_DST_ADR | CAPTURE_DMA__TD_TERMOUT_EN);
CyDmaTdSetAddress(td[i], LO16((uint32)&SAMPLER_DATAPATH_F0_REG), LO16((uint32)&dma_buffer[i]));
CY_DMA_TD_INC_DST_ADR | SAMPLER_DMA__TD_TERMOUT_EN);
CyDmaTdSetAddress(td[i], LO16((uint32)SAMPLER_FIFO_FIFO_PTR), LO16((uint32)&dma_buffer[i]));
}
}
@@ -292,13 +304,11 @@ static void cmd_read(struct read_frame* f)
/* Do slow setup *before* we go into the real-time bit. */
SAMPLER_CONTROL_Write(1); /* reset */
{
uint8_t i = CyEnterCriticalSection();
SAMPLER_DATAPATH_F0_SET_LEVEL_MID;
SAMPLER_DATAPATH_F0_CLEAR;
SAMPLER_DATAPATH_F0_SINGLE_BUFFER_UNSET;
SAMPLER_FIFO_SET_LEVEL_MID;
SAMPLER_FIFO_CLEAR;
SAMPLER_FIFO_SINGLE_BUFFER_UNSET;
CyExitCriticalSection(i);
}
@@ -320,7 +330,6 @@ static void cmd_read(struct read_frame* f)
dma_reading_from_td = -1;
dma_underrun = false;
int count = 0;
SAMPLER_CONTROL_Write(0); /* !reset */
CyDmaChSetInitialTd(dma_channel, td[dma_writing_to_td]);
CyDmaClearPendingDrq(dma_channel);
CyDmaChEnable(dma_channel, 1);
@@ -386,12 +395,14 @@ abort:;
donecrunch(&cs);
wait_until_writeable(FLUXENGINE_DATA_IN_EP_NUM);
unsigned zz = cs.outputlen;
if (cs.outputlen != BUFFER_SIZE)
USBFS_LoadInEP(FLUXENGINE_DATA_IN_EP_NUM, usb_buffer, BUFFER_SIZE-cs.outputlen);
if (!dma_underrun)
{
if (cs.outputlen != BUFFER_SIZE)
USBFS_LoadInEP(FLUXENGINE_DATA_IN_EP_NUM, usb_buffer, BUFFER_SIZE-cs.outputlen);
wait_until_writeable(FLUXENGINE_DATA_IN_EP_NUM);
}
if ((cs.outputlen == BUFFER_SIZE) || (cs.outputlen == 0))
USBFS_LoadInEP(FLUXENGINE_DATA_IN_EP_NUM, NULL, 0);
wait_until_writeable(FLUXENGINE_DATA_IN_EP_NUM);
deinit_dma();
if (dma_underrun)
@@ -404,7 +415,7 @@ abort:;
DECLARE_REPLY_FRAME(struct any_frame, F_FRAME_READ_REPLY);
send_reply(&r);
}
print("count=%d i=%d d=%d zz=%d", count, index_irq, dma_underrun, zz);
print("count=%d i=%d d=%d", count, index_irq, dma_underrun);
}
static void init_replay_dma(void)
@@ -622,16 +633,6 @@ static void cmd_erase(struct erase_frame* f)
send_reply((struct any_frame*) &r);
}
static void set_drive_flags(uint8_t flags)
{
if (current_drive_flags != flags)
homed = false;
current_drive_flags = flags;
DRIVESELECT_REG_Write((flags & 1) ? 2 : 1); /* select drive 1 or 0 */
DENSITY_REG_Write(flags >> 1); /* density bit */
}
static void cmd_set_drive(struct set_drive_frame* f)
{
set_drive_flags(f->drive_flags);
@@ -789,7 +790,7 @@ int main(void)
CySysTickStart();
CySysTickSetCallback(4, system_timer_cb);
INDEX_IRQ_StartEx(&index_irq_cb);
CAPTURE_DMA_FINISHED_IRQ_StartEx(&capture_dma_finished_irq_cb);
SAMPLER_DMA_FINISHED_IRQ_StartEx(&capture_dma_finished_irq_cb);
SEQUENCER_DMA_FINISHED_IRQ_StartEx(&replay_dma_finished_irq_cb);
INPUT_VOLTAGE_ADC_Stop();
OUTPUT_VOLTAGE_ADC_Stop();
@@ -809,10 +810,7 @@ int main(void)
{
uint32_t time_on = clock - motor_on_time;
if (time_on > MOTOR_ON_TIME)
{
MOTOR_REG_Write(0);
motor_on = false;
}
stop_motor();
}
if (!USBFS_GetConfiguration() || USBFS_IsConfigurationChanged())

View File

@@ -13,6 +13,13 @@ export LDFLAGS +=
export LIBS = -static -lz -lsqlite3 -lusb-1.0
export EXTENSION = .exe
else
packages-exist = $(shell pkg-config --exists $(PACKAGES) && echo yes)
ifneq ($(packages-exist),yes)
$(warning These pkg-config packages are installed: $(shell pkg-config --list-all | sort | awk '{print $$1}'))
$(error You must have these pkg-config packages installed: $(PACKAGES))
endif
export CXX = g++
export AR = ar rcs
export STRIP = strip

View File

@@ -89,7 +89,7 @@ people who've had it work).
| [Brother 120kB](doc/disk-brother.md) | 🦄 | | |
| [Brother 240kB](doc/disk-brother.md) | 🦄 | 🦄 | |
| [Brother FB-100](doc/disk-fb100.md) | 🦖 | | Tandy Model 100, Husky Hunter, knitting machines |
| [Macintosh 800kB](doc/disk-macintosh.md) | 🦄 | | and probably the 400kB too |
| [Macintosh 800kB](doc/disk-macintosh.md) | 🦖 | | and probably the 400kB too |
| [TRS-80](doc/disk-trs80.md) | 🦖 | | a minor variation of the IBM scheme |
{: .datatable }

101
arch/amiga/amiga.cc Normal file
View File

@@ -0,0 +1,101 @@
#include "globals.h"
#include "record.h"
#include "decoders/decoders.h"
#include "amiga.h"
#include "bytes.h"
#include "fmt/format.h"
uint32_t amigaChecksum(const Bytes& bytes)
{
ByteReader br(bytes);
uint32_t checksum = 0;
assert((bytes.size() & 3) == 0);
while (!br.eof())
checksum ^= br.read_be32();
return checksum & 0x55555555;
}
static uint8_t everyother(uint16_t x)
{
/* aabb ccdd eeff gghh */
x &= 0x6666; /* 0ab0 0cd0 0ef0 0gh0 */
x >>= 1; /* 00ab 00cd 00ef 00gh */
x |= x << 2; /* abab cdcd efef ghgh */
x &= 0x3c3c; /* 00ab cd00 00ef gh00 */
x >>= 2; /* 0000 abcd 0000 efgh */
x |= x >> 4; /* 0000 abcd abcd efgh */
return x;
}
Bytes amigaInterleave(const Bytes& input)
{
Bytes output;
ByteWriter bw(output);
/* Write all odd bits. (Numbering starts at 0...) */
{
ByteReader br(input);
while (!br.eof())
{
uint16_t x = br.read_be16();
x &= 0xaaaa; /* a0b0 c0d0 e0f0 g0h0 */
x |= x >> 1; /* aabb ccdd eeff gghh */
x = everyother(x); /* 0000 0000 abcd efgh */
bw.write_8(x);
}
}
/* Write all even bits. */
{
ByteReader br(input);
while (!br.eof())
{
uint16_t x = br.read_be16();
x &= 0x5555; /* 0a0b 0c0d 0e0f 0g0h */
x |= x << 1; /* aabb ccdd eeff gghh */
x = everyother(x); /* 0000 0000 abcd efgh */
bw.write_8(x);
}
}
return output;
}
Bytes amigaDeinterleave(const uint8_t*& input, size_t len)
{
assert(!(len & 1));
const uint8_t* odds = &input[0];
const uint8_t* evens = &input[len/2];
Bytes output;
ByteWriter bw(output);
for (size_t i=0; i<len/2; i++)
{
uint8_t o = *odds++;
uint8_t e = *evens++;
/* This is the 'Interleave bits with 64-bit multiply' technique from
* http://graphics.stanford.edu/~seander/bithacks.html#InterleaveBMN
*/
uint16_t result =
(((e * 0x0101010101010101ULL & 0x8040201008040201ULL)
* 0x0102040810204081ULL >> 49) & 0x5555) |
(((o * 0x0101010101010101ULL & 0x8040201008040201ULL)
* 0x0102040810204081ULL >> 48) & 0xAAAA);
bw.write_be16(result);
}
input += len;
return output;
}
Bytes amigaDeinterleave(const Bytes& input)
{
const uint8_t* ptr = input.cbegin();
return amigaDeinterleave(ptr, input.size());
}

View File

@@ -1,12 +1,17 @@
#ifndef AMIGA_H
#define AMIGA_H
#include "encoders/encoders.h"
#define AMIGA_SECTOR_RECORD 0xaaaa44894489LL
#define AMIGA_TRACKS_PER_DISK 80
#define AMIGA_SECTORS_PER_TRACK 11
#define AMIGA_RECORD_SIZE 0x21f
class Sector;
class Fluxmap;
class SectorSet;
class AmigaDecoder : public AbstractDecoder
{
@@ -17,4 +22,20 @@ public:
void decodeSectorRecord();
};
class AmigaEncoder : public AbstractEncoder
{
public:
virtual ~AmigaEncoder() {}
public:
std::unique_ptr<Fluxmap> encode(int physicalTrack, int physicalSide, const SectorSet& allSectors);
};
extern FlagGroup amigaEncoderFlags;
extern uint32_t amigaChecksum(const Bytes& bytes);
extern Bytes amigaInterleave(const Bytes& input);
extern Bytes amigaDeinterleave(const uint8_t*& input, size_t len);
extern Bytes amigaDeinterleave(const Bytes& input);
#endif

View File

@@ -21,47 +21,6 @@
static const FluxPattern SECTOR_PATTERN(48, AMIGA_SECTOR_RECORD);
static Bytes deinterleave(const uint8_t*& input, size_t len)
{
assert(!(len & 1));
const uint8_t* odds = &input[0];
const uint8_t* evens = &input[len/2];
Bytes output;
ByteWriter bw(output);
for (size_t i=0; i<len/2; i++)
{
uint8_t o = *odds++;
uint8_t e = *evens++;
/* This is the 'Interleave bits with 64-bit multiply' technique from
* http://graphics.stanford.edu/~seander/bithacks.html#InterleaveBMN
*/
uint16_t result =
(((e * 0x0101010101010101ULL & 0x8040201008040201ULL)
* 0x0102040810204081ULL >> 49) & 0x5555) |
(((o * 0x0101010101010101ULL & 0x8040201008040201ULL)
* 0x0102040810204081ULL >> 48) & 0xAAAA);
bw.write_be16(result);
}
input += len;
return output;
}
static uint32_t checksum(const Bytes& bytes)
{
ByteReader br(bytes);
uint32_t checksum = 0;
assert((bytes.size() & 3) == 0);
while (!br.eof())
checksum ^= br.read_be32();
return checksum & 0x55555555;
}
AbstractDecoder::RecordType AmigaDecoder::advanceToNextRecord()
{
_sector->clock = _fmr->seekToPattern(SECTOR_PATTERN);
@@ -78,22 +37,22 @@ void AmigaDecoder::decodeSectorRecord()
const uint8_t* ptr = bytes.begin() + 3;
Bytes header = deinterleave(ptr, 4);
Bytes recoveryinfo = deinterleave(ptr, 16);
Bytes header = amigaDeinterleave(ptr, 4);
Bytes recoveryinfo = amigaDeinterleave(ptr, 16);
_sector->logicalTrack = header[1] >> 1;
_sector->logicalSide = header[1] & 1;
_sector->logicalSector = header[2];
uint32_t wantedheaderchecksum = deinterleave(ptr, 4).reader().read_be32();
uint32_t gotheaderchecksum = checksum(rawbytes.slice(6, 40));
uint32_t wantedheaderchecksum = amigaDeinterleave(ptr, 4).reader().read_be32();
uint32_t gotheaderchecksum = amigaChecksum(rawbytes.slice(6, 40));
if (gotheaderchecksum != wantedheaderchecksum)
return;
uint32_t wanteddatachecksum = deinterleave(ptr, 4).reader().read_be32();
uint32_t gotdatachecksum = checksum(rawbytes.slice(62, 1024));
uint32_t wanteddatachecksum = amigaDeinterleave(ptr, 4).reader().read_be32();
uint32_t gotdatachecksum = amigaChecksum(rawbytes.slice(62, 1024));
_sector->data.clear();
_sector->data.writer().append(deinterleave(ptr, 512)).append(recoveryinfo);
_sector->data.writer().append(amigaDeinterleave(ptr, 512)).append(recoveryinfo);
_sector->status = (gotdatachecksum == wanteddatachecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
}

126
arch/amiga/encoder.cc Normal file
View File

@@ -0,0 +1,126 @@
#include "globals.h"
#include "record.h"
#include "decoders/decoders.h"
#include "encoders/encoders.h"
#include "amiga.h"
#include "crc.h"
#include "sectorset.h"
#include "writer.h"
FlagGroup amigaEncoderFlags;
static DoubleFlag clockRateUs(
{ "--clock-rate" },
"Encoded data clock rate (microseconds).",
2.00);
static DoubleFlag postIndexGapMs(
{ "--post-index-gap" },
"Post-index gap before first sector header (milliseconds).",
0.5);
static int charToInt(char c)
{
if (isdigit(c))
return c - '0';
return 10 + tolower(c) - 'a';
}
static void write_bits(std::vector<bool>& bits, unsigned& cursor, const std::vector<bool>& src)
{
for (bool bit : src)
{
if (cursor < bits.size())
bits[cursor++] = bit;
}
}
static void write_bits(std::vector<bool>& bits, unsigned& cursor, uint64_t data, int width)
{
cursor += width;
for (int i=0; i<width; i++)
{
unsigned pos = cursor - i - 1;
if (pos < bits.size())
bits[pos] = data & 1;
data >>= 1;
}
}
static void write_interleaved_bytes(std::vector<bool>& bits, unsigned& cursor, const Bytes& bytes)
{
assert(!(bytes.size() & 3));
Bytes interleaved = amigaInterleave(bytes);
encodeMfm(bits, cursor, interleaved);
}
static void write_interleaved_bytes(std::vector<bool>& bits, unsigned& cursor, uint32_t data)
{
Bytes b(4);
ByteWriter bw(b);
bw.write_be32(data);
write_interleaved_bytes(bits, cursor, b);
}
static void write_sector(std::vector<bool>& bits, unsigned& cursor, const Sector* sector)
{
if ((sector->data.size() != 512) && (sector->data.size() != 528))
Error() << "unsupported sector size --- you must pick 512 or 528";
write_bits(bits, cursor, AMIGA_SECTOR_RECORD, 6*8);
std::vector<bool> headerBits(20*16);
unsigned headerCursor = 0;
Bytes header =
{
0xff, /* Amiga 1.0 format byte */
(uint8_t) ((sector->logicalTrack<<1) | sector->logicalSide),
(uint8_t) sector->logicalSector,
(uint8_t) (AMIGA_SECTORS_PER_TRACK - sector->logicalSector)
};
write_interleaved_bytes(headerBits, headerCursor, header);
Bytes recoveryInfo(16);
if (sector->data.size() == 528)
recoveryInfo = sector->data.slice(512, 16);
write_interleaved_bytes(headerBits, headerCursor, recoveryInfo);
std::vector<bool> dataBits(512*16);
unsigned dataCursor = 0;
write_interleaved_bytes(dataBits, dataCursor, sector->data);
write_bits(bits, cursor, headerBits);
uint32_t headerChecksum = amigaChecksum(toBytes(headerBits));
write_interleaved_bytes(bits, cursor, headerChecksum);
uint32_t dataChecksum = amigaChecksum(toBytes(dataBits));
write_interleaved_bytes(bits, cursor, dataChecksum);
write_bits(bits, cursor, dataBits);
}
std::unique_ptr<Fluxmap> AmigaEncoder::encode(
int physicalTrack, int physicalSide, const SectorSet& allSectors)
{
if ((physicalTrack < 0) || (physicalTrack >= AMIGA_TRACKS_PER_DISK))
return std::unique_ptr<Fluxmap>();
int bitsPerRevolution = 200000.0 / clockRateUs;
std::vector<bool> bits(bitsPerRevolution);
unsigned cursor = 0;
fillBitmapTo(bits, cursor, postIndexGapMs * 1000 / clockRateUs, { true, false });
for (int sectorId=0; sectorId<AMIGA_SECTORS_PER_TRACK; sectorId++)
{
const auto& sectorData = allSectors.get(physicalTrack, physicalSide, sectorId);
write_sector(bits, cursor, sectorData);
}
if (cursor >= bits.size())
Error() << "track data overrun";
fillBitmapTo(bits, cursor, bits.size(), { true, false });
std::unique_ptr<Fluxmap> fluxmap(new Fluxmap);
fluxmap->appendBits(bits, clockRateUs*1e3);
return fluxmap;
}

View File

@@ -154,7 +154,7 @@ std::unique_ptr<Fluxmap> BrotherEncoder::encode(
write_sector_data(bits, cursor, sectorData->data);
}
if (cursor > bits.size())
if (cursor >= bits.size())
Error() << "track data overrun";
fillBitmapTo(bits, cursor, bits.size(), { true, false });

View File

Binary file not shown.

View File

@@ -182,7 +182,7 @@ install some support packages.
- For Linux (this is Ubuntu, but this should apply to Debian too):
`ninja-build`, `libusb-1.0-0-dev`, `libsqlite3-dev`.
- For OSX with Homebrew: `ninja`.
- For OSX with Homebrew: `ninja`, `libusb`, `pkg-config`, `sqlite`.
- For Windows with MSYS2: `make`, `ninja`, `mingw-w64-i686-libusb`,
`mingw-w64-i686-sqlite3`, `mingw-w64-i686-zlib`, `mingw-w64-i686-gcc`.

View File

@@ -10,7 +10,7 @@ Bizarrely, the data in each sector is stored with all the odd bits first, and
then all the even bits. This is tied into the checksum algorithm, which is
distinctly subpar and not particularly good at detecting errors.
Reading discs
Reading disks
-------------
Just do:
@@ -34,6 +34,28 @@ You will end up with a 929280 byte long image which you probably _can't_ use
in an emulator; each sector will contain the 512 bytes of user payload
followed by the 16 bytes of metadata.
Writing disks
-------------
Just do:
```
fluxengine write amiga -i amiga.adf
```
This will rake a normal 901120 byte long ADF file and write it to a DD disk.
Note that writing to an HD disk will probably not work (this will depend on
your drive and disk and potential FluxEngine bugs I'm still working on ---
please [get in touch](https://github.com/davidgiven/fluxengine/issues/new) if
you have any insight here).
If you want to write the metadata as well, specify a 528 byte sector size for
the output image and supply a 929280 byte long file as described above.
```
fluxengine write amiga -i amiga.adf:b=528
```
Useful references
-----------------

View File

@@ -28,8 +28,16 @@ for example the Commodore 64 1541 drive, changed bitrate this way.
But Macintosh disks used a constant bitrate and changed the speed that the
disk spun instead to achieve the same effect...
_Anyway_: FluxEngine will read them fine on a conventional drive. Because
it's clever.
_Anyway_: FluxEngine will read them fine on conventional drives.
Because it's clever.
**Big note.** Apparently --- and I'm still getting to the bottom of this ---
some drives work and some don't. My drives produce about 90% good reads of
known good disks. One rumour I've heard is that drives sometimes include
filters which damage the signals at very particular intervals which Mac disks
use, but frankly this seems unlikely; it could be a software issue at my end
and I'm investigating. If you have any insight, please [get in
touch](https://github.com/davidgiven/fluxengine/issues/new).
Reading discs
-------------

View File

@@ -48,7 +48,7 @@ haven't had the chance to try it end-for-end. I really need a hard-sectored
**Q.** Does it work with flippy disks?
Uhhh... probably not.
Uhhh... maybe?
So the problem with flippy disks (5.25" single-sided disks which could be
inserted upside down to read the second side) is the index hole. Trouble is,
@@ -79,16 +79,21 @@ the other. But a flippy disk has both sets of tracks in the same place,
because they're both accessed using the side 0 head...
The only real way round this is to modify a 5.25" drive. That's _seriously_
not in FluxEngine's remit. Sorry.
not in FluxEngine's remit, but I've had some [excellent documentation
contributed](Index_sensor_mod_FDD_1.1.pdf) on how to do this. I've never done
it myself; if you try this and it works/doesn't work, as always, [get in
touch](https://github.com/davidgiven/fluxengine/issues/new).
**Q.** Is this like KryoFlux / Catweasel / DiskFerret? Do you support KryoFlux
**Q.** Is this like Supercard Pro / KryoFlux / Catweasel / DiskFerret? Do you
*support KryoFlux
stream files?
**A.** It's very like all of these; the idea's old, and lots of people have
tried it (you can get away with any sufficiently fast microcontroller and
enough RAM). FluxEngine can read from KryoFlux stream files natively, and
there's a tool which will let you convert at least one kind of Catweasel file
to FluxEngine's native flux file format.
there's a tool which will let you convert at least one kind of Catweasel
files and Supercard Pro files to and from FluxEngine's native flux file
format.
**Q.** Can I use this to make exact copies of disks?

View File

@@ -20,6 +20,7 @@ extern void setDecoderManualClockRate(double clockrate_us);
extern Bytes decodeFmMfm(std::vector<bool>::const_iterator start,
std::vector<bool>::const_iterator end);
extern void encodeMfm(std::vector<bool>& bits, unsigned& cursor, const Bytes& input);
static inline Bytes decodeFmMfm(const std::vector<bool> bits)
{ return decodeFmMfm(bits.begin(), bits.end()); }

View File

@@ -18,7 +18,7 @@ DoubleFlag pulseDebounceThreshold(
static DoubleFlag clockDecodeThreshold(
{ "--bit-error-threshold" },
"Amount of error to tolerate in pulse timing, in fractions of a clock.",
0.20);
0.40);
static DoubleFlag clockIntervalBias(
{ "--clock-interval-bias" },

View File

@@ -51,3 +51,25 @@ Bytes decodeFmMfm(
return bytes;
}
void encodeMfm(std::vector<bool>& bits, unsigned& cursor, const Bytes& input)
{
bool lastBit = false;
unsigned len = bits.size()-1;
for (uint8_t b : input)
{
for (int i=0; i<8; i++)
{
bool bit = b & 0x80;
b <<= 1;
if (cursor >= len)
return;
bits[cursor++] = !lastBit && !bit;
bits[cursor++] = bit;
lastBit = bit;
}
}
}

View File

@@ -219,10 +219,7 @@ void readDiskCommand(AbstractDecoder& decoder)
std::cout << "giving up" << std::endl
<< " ";
else
{
std::cout << retry << " retries remaining" << std::endl;
track->fluxsource->recalibrate();
}
}
if (dumpRecords)

View File

@@ -145,6 +145,8 @@ buildlibrary libbackend.a \
lib/imagewriter/ldbsimagewriter.cc \
arch/aeslanier/decoder.cc \
arch/amiga/decoder.cc \
arch/amiga/encoder.cc \
arch/amiga/amiga.cc \
arch/apple2/decoder.cc \
arch/brother/decoder.cc \
arch/brother/encoder.cc \
@@ -214,6 +216,7 @@ buildlibrary libfrontend.a \
src/fe-testbulktransport.cc \
src/fe-testvoltages.cc \
src/fe-upgradefluxfile.cc \
src/fe-writeamiga.cc \
src/fe-writebrother.cc \
src/fe-writeflux.cc \
src/fe-writetestpattern.cc \
@@ -251,3 +254,4 @@ runtest fluxpattern-test tests/fluxpattern.cc
runtest fmmfm-test tests/fmmfm.cc
runtest kryoflux-test tests/kryoflux.cc
runtest ldbs-test tests/ldbs.cc
runtest amiga-test tests/amiga.cc

View File

@@ -3,7 +3,7 @@
enum
{
FLUXENGINE_VERSION = 8,
FLUXENGINE_VERSION = 9,
FLUXENGINE_VID = 0x1209,
FLUXENGINE_PID = 0x6e00,

View File

@@ -85,7 +85,7 @@ int mainConvertFluxToScp(int argc, const char* argv[])
fileheader.file_id[0] = 'S';
fileheader.file_id[1] = 'C';
fileheader.file_id[2] = 'P';
fileheader.file_id[3] = 0x18; /* Version 1.8 of the spec */
fileheader.version = 0x18; /* Version 1.8 of the spec */
fileheader.type = diskType;
fileheader.revolutions = 5;
fileheader.start_track = 0;

23
src/fe-writeamiga.cc Normal file
View File

@@ -0,0 +1,23 @@
#include "globals.h"
#include "flags.h"
#include "decoders/decoders.h"
#include "amiga/amiga.h"
#include "writer.h"
#include "fmt/format.h"
#include "image.h"
#include <fstream>
static FlagGroup flags { &writerFlags, &amigaEncoderFlags };
int mainWriteAmiga(int argc, const char* argv[])
{
setWriterDefaultInput(":c=80:h=2:s=11:b=512");
setWriterDefaultDest(":d=0:t=0-79:s=0-1");
flags.parseFlags(argc, argv);
AmigaEncoder encoder;
writeDiskCommand(encoder);
return 0;
}

View File

@@ -29,6 +29,7 @@ extern command_cb mainSeek;
extern command_cb mainTestBulkTransport;
extern command_cb mainTestVoltages;
extern command_cb mainUpgradeFluxFile;
extern command_cb mainWriteAmiga;
extern command_cb mainWriteBrother;
extern command_cb mainWriteFlux;
extern command_cb mainWriteTestPattern;
@@ -81,6 +82,7 @@ static std::vector<Command> readables =
static std::vector<Command> writeables =
{
{ "amiga", mainWriteAmiga, "Writes Amiga disks.", },
{ "brother", mainWriteBrother, "Writes 120kB and 240kB Brother word processor disks.", },
};

38
tests/amiga.cc Normal file
View File

@@ -0,0 +1,38 @@
#include "globals.h"
#include "bytes.h"
#include "record.h"
#include "decoders/decoders.h"
#include "arch/amiga/amiga.h"
#include <assert.h>
static const Bytes testData = {
0x52, /* 0101 0010 */
0xff, /* 1111 1111 */
0x4a, /* 0100 1010 */
0x22, /* 0010 0010 */
};
static const Bytes testDataInterleaved = {
0x1f, /* 0001 1111 */
0x35, /* 0011 0101 */
0xcf, /* 1100 1111 */
0x80, /* 1000 0000 */
};
static void testInterleave(void)
{
Bytes interleaved = amigaInterleave(testData);
assert(interleaved == testDataInterleaved);
}
static void testDeinterleave(void)
{
Bytes deinterleaved = amigaDeinterleave(testDataInterleaved);
assert(deinterleaved == testData);
}
int main(int argc, const char* argv[])
{
testDeinterleave();
testInterleave();
return 0;
}