Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
ed8c2227
Unverified
Commit
ed8c2227
authored
Mar 22, 2024
by
clabby
Committed by
GitHub
Mar 22, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Require re-proving against a different game (#9944)
split req
parent
9a96543e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
88 additions
and
9 deletions
+88
-9
optimismportal2.go
op-bindings/bindingspreview/optimismportal2.go
+1
-1
optimismportal2_more.go
op-bindings/bindingspreview/optimismportal2_more.go
+1
-1
semver-lock.json
packages/contracts-bedrock/semver-lock.json
+2
-2
OptimismPortal2.sol
packages/contracts-bedrock/src/L1/OptimismPortal2.sol
+9
-2
OptimismPortal2.t.sol
packages/contracts-bedrock/test/L1/OptimismPortal2.t.sol
+75
-3
No files found.
op-bindings/bindingspreview/optimismportal2.go
View file @
ed8c2227
This source diff could not be displayed because it is too large. You can
view the blob
instead.
op-bindings/bindingspreview/optimismportal2_more.go
View file @
ed8c2227
...
@@ -13,7 +13,7 @@ const OptimismPortal2StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contra
...
@@ -13,7 +13,7 @@ const OptimismPortal2StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contra
var
OptimismPortal2StorageLayout
=
new
(
solc
.
StorageLayout
)
var
OptimismPortal2StorageLayout
=
new
(
solc
.
StorageLayout
)
var
OptimismPortal2DeployedBin
=
"0x6080604052600436106101a55760003560e01c80638b4c40b0116100e1578063bf653a5c1161008a578063e965084c11610064578063e965084c146105f1578063e9e05c421461068d578063f0498750146106a0578063f2b4e617146106cb57600080fd5b8063bf653a5c146104fd578063c0c53b8b14610530578063cff0ab961461055057600080fd5b80639bf62d82116100bb5780639bf62d8214610480578063a14238e7146104ad578063a35d99df146104dd57600080fd5b80638b4c40b0146101ca5780638c3152e914610423578063952b27971461044357600080fd5b80634fd0434c1161014e578063724c184c11610128578063724c184c146103ae5780637af1906d146103c35780637d6be8dc146103e35780637fc485041461040357600080fd5b80634fd0434c1461030157806354fd4d50146103435780635c975abb1461039957600080fd5b8063452a93201161017f578063452a93201461028c57806345884d32146102a15780634870496f146102e157600080fd5b806333d7e2bd146101d157806335e80ab3146102285780633c9f397c1461025a57600080fd5b366101cc576101ca3334620186a06000604051806020016040528060008152506106f8565b005b600080fd5b3480156101dd57600080fd5b506037546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023457600080fd5b506035546101fe90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561026657600080fd5b50603b546102779063ffffffff1681565b60405163ffffffff909116815260200161021f565b34801561029857600080fd5b506101fe610993565b3480156102ad57600080fd5b506102d16102bc366004614
ecb565b603a6020526000908152604090205460ff1681565b604051901515815260200161021f565b3480156102ed57600080fd5b506101ca6102fc3660046150a3565b610a2b565b34801561030d57600080fd5b50603b5461032a90640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161021f565b34801561034f57600080fd5b5061038c6040518060400160405280600581526020017f332e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161021f91906151f5565b3480156103a557600080fd5b506102d161129c565b3480156103ba57600080fd5b506101fe61132f565b3480156103cf57600080fd5b506101ca6103de366004615208565b611339565b3480156103ef57600080fd5b506101ca6103fe366004614ecb565b611b61565b34801561040f57600080fd5b506101ca61041e366004615233565b611c72565b34801561042f57600080fd5b506101ca61043e366004615250565b611da8565b34801561044f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161021f565b34801561048c57600080fd5b506032546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104b957600080fd5b506102d16104c8366004615208565b60336020526000908152604090205460ff1681565b3480156104e957600080fd5b5061032a6104f83660046152a3565b612085565b34801561050957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610472565b34801561053c57600080fd5b506101ca61054b3660046152c0565b6120a4565b34801561055c57600080fd5b506001546105b8906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161021f565b3480156105fd57600080fd5b5061065861060c366004615208565b60396020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161021f565b6101ca61069b366004615319565b6106f8565b3480156106ac57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101fe565b3480156106d757600080fd5b506038546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a905083156107af5773ffffffffffffffffffffffffffffffffffffffff8716156107af57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6107b98351612085565b67ffffffffffffffff168567ffffffffffffffff16101561085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b6201d4c0835111156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016107a6565b333281146108eb575033731111000000000000000000000000000000001111015b60003488888888604051602001610906959493929190615398565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161097691906151f5565b60405180910390a4505061098a828261230d565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2691906153fd565b905090565b610a3361129c565b15610a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016107a6565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016107a6565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf1919061541a565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061545c565b603b5490915060ff848116911614610d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b610d18610d1336889003880188615475565b61263a565b8114610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016107a6565b6000610db189612696565b60008181526039602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910467ffffffffffffffff169183018290529293509091901580610ea0575060018173ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8d919061550a565b6002811115610e9e57610e9e6154db565b145b80610ed0575073ffffffffffffffffffffffffffffffffffffffff81166000908152603a602052604090205460ff165b80610f635750603b5463ffffffff1660ff16610f5d8273ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f54919061552b565b63ffffffff1690565b60ff1614155b611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152606060248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e2c20616e642074686560648201527f206f6c6420646973707574652067616d65206973206e6f7420696e76616c6964608482015260a4016107a6565b60408051602081018590526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506110de9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906110d48b8d615548565b8d604001356126c6565b61116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016107a6565b60405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506039600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050508b6040015173ffffffffffffffffffffffffffffffffffffffff168c6020015173ffffffffffffffffffffffffffffffffffffffff16857f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6260405160405180910390a4505050505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2691906155cc565b6000610a26610993565b600081815260396020908152604080832081518083018352905473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff1682850152808552603a90935292205460ff161561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016107a6565b816020015167ffffffffffffffff166000036114cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016107a6565b600061154e8273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154191906155e9565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff161161161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016107a6565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116589190615635565b116116e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016107a6565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611756919061550a565b6002811115611767576117676154db565b146117f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2066696e616c697a65642079657400000000000060648201526084016107a6565b603b5463ffffffff1660ff1661184e8373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d6000803e3d6000fd5b60ff16146118de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b603b5467ffffffffffffffff640100000000909104811690821610156119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016107a6565b7f0000000000000000000000000000000000000000000000000000000000000000611a1b8373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151d573d6000803e3d6000fd5b611a2f9067ffffffffffffffff1642615635565b11611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016107a6565b60008481526033602052604090205460ff1615611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016107a6565b50505050565b611b69610993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7074696d69736d506f7274616c3a206f6e6c7920746865206775617264696160448201527f6e2063616e20626c61636b6c69737420646973707574652067616d657300000060648201526084016107a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611c7a610993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4f7074696d69736d506f7274616c3a206f6e6c7920746865206775617264696160448201527f6e2063616e2073657420746865207265737065637465642067616d652074797060648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016107a6565b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611db061129c565b15611e17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016107a6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611ec0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016107a6565b6000611ecb82612696565b9050611ed681611339565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908401516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558301516080840151606085015160a0860151611f78939291906126ea565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611fdd90841515815260200190565b60405180910390a280158015611ff35750326001145b15612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b505050565b600061209282601061564c565b61209e9061520861567c565b92915050565b600054610100900460ff16158080156120c45750600054600160ff909116105b806120de5750303b1580156120de575060005460ff166001145b61216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107a6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121c857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661228157603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b612289612748565b8015611b5b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612343907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615635565b9050600061234f61285b565b90506000816020015160ff16826000015163ffffffff1661237091906156d7565b905082156124a7576001546000906123a7908390700100000000000000000000000000000000900467ffffffffffffffff1661573f565b90506000836040015160ff16836123be91906157b3565b6001546123de9084906fffffffffffffffffffffffffffffffff166157b3565b6123e891906156d7565b600154909150600090612439906124129084906fffffffffffffffffffffffffffffffff1661586f565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661291c565b905060018611156124685761246561241282876040015160ff1660018a6124609190615635565b61293b565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906124da908490700100000000000000000000000000000000900467ffffffffffffffff1661567c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156125bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016107a6565b6001546000906125e9906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166158e3565b905060006125fb48633b9aca00612990565b6126059083615920565b905060005a6126149088615635565b9050808211156126305761263061262b8284615635565b6129a7565b5050505050505050565b60008160000151826020015183604001518460600151604051602001612679949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612679979096959101615934565b6000806126d2866129d0565b90506126e081868686612a02565b9695505050505050565b60008060006126fa866000612a32565b905080612730576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166127df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107a6565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611da65760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156128f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2691906159a1565b600061293161292b8585612a50565b83612a60565b90505b9392505050565b6000670de0b6b3a764000061297c61295385836156d7565b61296590670de0b6b3a764000061573f565b61297785670de0b6b3a76400006157b3565b612a6f565b61298690866157b3565b61293191906156d7565b6000818310156129a05781612934565b5090919050565b6000805a90505b825a6129ba9083615635565b1015612080576129c982615a5d565b91506129ae565b606081805190602001206040516020016129ec91815260200190565b6040516020818303038152906040529050919050565b6000612a2984612a13878686612aa0565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129a05781612934565b60008183126129a05781612934565b6000612934670de0b6b3a764000083612a878661351e565b612a9191906157b3565b612a9b91906156d7565b613762565b60606000845111612b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016107a6565b6000612b18846139a1565b90506000612b2586613a8d565b9050600084604051602001612b3c91815260200190565b60405160208183030381529060405290506000805b8451811015613495576000858281518110612b6e57612b6e615a95565b602002602001015190508451831115612c09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016107a6565b82600003612cc25780518051602091820120604051612c5792612c3192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016107a6565b612e19565b805151602011612d785780518051602091820120604051612cec92612c3192910190815260200190565b612cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016107a6565b805184516020808701919091208251919092012014612e19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016107a6565b612e2560106001615ac4565b816020015151036130015784518303612f9957612e5f8160200151601081518110612e5257612e52615a95565b6020026020010151613af0565b96506000875111612ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016107a6565b60018651612f009190615635565b8214612f8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016107a6565b505050505050612934565b6000858481518110612fad57612fad615a95565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612fd857612fd8615a95565b60200260200101519050612feb81613c50565b9550612ff8600186615ac4565b94505050613482565b6002816020015151036133fa57600061301982613c75565b905060008160008151811061303057613030615a95565b016020015160f81c90506000613047600283615adc565b613052906002615afe565b90506000613063848360ff16613c99565b905060006130718a89613c99565b9050600061307f8383613ccf565b905080835114613111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016107a6565b60ff851660021480613126575060ff85166003145b1561331557808251146131bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016107a6565b6131d58760200151600181518110612e5257612e52615a95565b9c5060008d5111613268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016107a6565b60018c516132769190615635565b8814613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016107a6565b505050505050505050505050612934565b60ff85161580613328575060ff85166001145b1561336757613354876020015160018151811061334757613347615a95565b6020026020010151613c50565b9950613360818a615ac4565b98506133ef565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016107a6565b505050505050613482565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016107a6565b508061348d81615a5d565b915050612b51565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016107a6565b6000808213613589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016107a6565b6000606061359684613d83565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361379357506000919050565b680755bf798b4a1bf1e58212613805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016107a6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156139bf576139bf614ee8565b604051908082528060200260200182016040528015613a0457816020015b60408051808201909152606080825260208201528152602001906001900390816139dd5790505b50915060005b81811015613a86576040518060400160405280858381518110613a2f57613a2f615a95565b60200260200101518152602001613a5e868481518110613a5157613a51615a95565b6020026020010151613e59565b815250838281518110613a7357613a73615a95565b6020908102919091010152600101613a0a565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ae5578060011b82018184015160001a8060041c8253600f811660018301535050600101613ab7565b509295945050505050565b60606000806000613b0085613e6c565b919450925090506000816001811115613b1b57613b1b6154db565b14613ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016107a6565b613bb28284615ac4565b855114613c41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016107a6565b612a29856020015184846148d9565b60606020826000015110613c6c57613c6782613af0565b61209e565b61209e8261496d565b606061209e613c948360200151600081518110612e5257612e52615a95565b613a8d565b606082518210613cb8575060408051602081019091526000815261209e565b6129348383848651613cca9190615635565b614983565b6000808251845110613ce2578251613ce5565b83515b90505b8082108015613d6c5750828281518110613d0457613d04615a95565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613d4357613d43615a95565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613d7c57816001019150613ce8565b5092915050565b6000808211613dee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016107a6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061209e613e6783614b5b565b614c44565b600080600080846000015111613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016107a6565b6020840151805160001a607f8111613f4f5760006001600094509450945050506148d2565b60b7811161415d576000613f64608083615635565b90508087600001511161401f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016107a6565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061409857507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b61414a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016107a6565b50600195509350600092506148d2915050565b60bf81116144ab57600061417260b783615635565b90508087600001511161422d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016107a6565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361430b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016107a6565b600184015160088302610100031c603781116143cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016107a6565b6143d98184615ac4565b89511161448e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016107a6565b614499836001615ac4565b97509550600094506148d29350505050565b60f7811161458c5760006144c060c083615635565b90508087600001511161457b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016107a6565b6001955093508492506148d2915050565b600061459960f783615635565b905080876000015111614654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016107a6565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016107a6565b600184015160088302610100031c603781116147f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016107a6565b6148008184615ac4565b8951116148b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016107a6565b6148c0836001615ac4565b97509550600194506148d29350505050565b9193909250565b60608167ffffffffffffffff8111156148f4576148f4614ee8565b6040519080825280601f01601f19166020018201604052801561491e576020820181803683370190505b50905081156129345760006149338486615ac4565b90506020820160005b8481101561495457828101518282015260200161493c565b84811115614963576000858301525b5050509392505050565b606061209e8260200151600084600001516148d9565b60608182601f0110156149f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016107a6565b828284011015614a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016107a6565b81830184511015614acb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016107a6565b606082158015614aea5760405191506000825260208201604052614b52565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614b23578051835260209283019201614b0b565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016107a6565b50604080518082019091528151815260209182019181019190915290565b60606000806000614c5485613e6c565b919450925090506001816001811115614c6f57614c6f6154db565b14614cfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016107a6565b8451614d088385615ac4565b14614d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016107a6565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614dac5790505093506000835b8651811015614e9a57600080614e1f6040518060400160405280858c60000151614e039190615635565b8152602001858c60200151614e189190615ac4565b9052613e6c565b509150915060405180604001604052808383614e3b9190615ac4565b8152602001848b60200151614e509190615ac4565b815250888581518110614e6557614e65615a95565b6020908102919091010152614e7b600185615ac4565b9350614e878183615ac4565b614e919084615ac4565b92505050614dd9565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614ec857600080fd5b50565b600060208284031215614edd57600080fd5b813561293481614ea6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614f5e57614f5e614ee8565b604052919050565b600082601f830112614f7757600080fd5b813567ffffffffffffffff811115614f9157614f91614ee8565b614fc260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614f17565b818152846020838601011115614fd757600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561500657600080fd5b60405160c0810167ffffffffffffffff828210818311171561502a5761502a614ee8565b81604052829350843583526020850135915061504582614ea6565b8160208401526040850135915061505b82614ea6565b816040840152606085013560608401526080850135608084015260a085013591508082111561508957600080fd5b5061509685828601614f66565b60a0830152505092915050565b600080600080600085870360e08112156150bc57600080fd5b863567ffffffffffffffff808211156150d457600080fd5b6150e08a838b01614ff4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561511957600080fd5b60408901955060c089013592508083111561513357600080fd5b828901925089601f84011261514757600080fd5b823591508082111561515857600080fd5b508860208260051b840101111561516e57600080fd5b959894975092955050506020019190565b60005b8381101561519a578181015183820152602001615182565b83811115611b5b5750506000910152565b600081518084526151c381602086016020860161517f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061293460208301846151ab565b60006020828403121561521a57600080fd5b5035919050565b63ffffffff81168114614ec857600080fd5b60006020828403121561524557600080fd5b813561293481615221565b60006020828403121561526257600080fd5b813567ffffffffffffffff81111561527957600080fd5b61528584828501614ff4565b949350505050565b67ffffffffffffffff81168114614ec857600080fd5b6000602082840312156152b557600080fd5b81356129348161528d565b6000806000606084860312156152d557600080fd5b83356152e081614ea6565b925060208401356152f081614ea6565b9150604084013561530081614ea6565b809150509250925092565b8015158114614ec857600080fd5b600080600080600060a0868803121561533157600080fd5b853561533c81614ea6565b94506020860135935060408601356153538161528d565b925060608601356153638161530b565b9150608086013567ffffffffffffffff81111561537f57600080fd5b61538b88828901614f66565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516153ec81604985016020870161517f565b919091016049019695505050505050565b60006020828403121561540f57600080fd5b815161293481614ea6565b60008060006060848603121561542f57600080fd5b835161543a81615221565b602085015190935061544b8161528d565b604085015190925061530081614ea6565b60006020828403121561546e57600080fd5b5051919050565b60006080828403121561548757600080fd5b6040516080810181811067ffffffffffffffff821117156154aa576154aa614ee8565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561551c57600080fd5b81516003811061293457600080fd5b60006020828403121561553d57600080fd5b815161293481615221565b600067ffffffffffffffff8084111561556357615563614ee8565b8360051b6020615574818301614f17565b86815291850191818101903684111561558c57600080fd5b865b848110156155c0578035868111156155a65760008081fd5b6155b236828b01614f66565b84525091830191830161558e565b50979650505050505050565b6000602082840312156155de57600080fd5b81516129348161530b565b6000602082840312156155fb57600080fd5b81516129348161528d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561564757615647615606565b500390565b600067ffffffffffffffff8083168185168183048111821515161561567357615673615606565b02949350505050565b600067ffffffffffffffff80831681851680830382111561569f5761569f615606565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826156e6576156e66156a8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561573a5761573a615606565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561577957615779615606565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156157ad576157ad615606565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156157f4576157f4615606565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561582f5761582f615606565b6000871292508782058712848416161561584b5761584b615606565b8785058712818416161561586157615861615606565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156158a9576158a9615606565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156158dd576158dd615606565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561591b5761591b615606565b500290565b60008261592f5761592f6156a8565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261597f60c08301846151ab565b98975050505050505050565b805160ff8116811461599c57600080fd5b919050565b600060c082840312156159b357600080fd5b60405160c0810181811067ffffffffffffffff821117156159d6576159d6614ee8565b60405282516159e481615221565b81526159f26020840161598b565b6020820152615a036040840161598b565b60408201526060830151615a1681615221565b60608201526080830151615a2981615221565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615a5157600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a8e57615a8e615606565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615ad757615ad7615606565b500190565b600060ff831680615aef57615aef6156a8565b8060ff84160691505092915050565b600060ff821660ff841680821015615b1857615b18615606
565b9003939250505056fea164736f6c634300080f000a"
var
OptimismPortal2DeployedBin
=
"0x6080604052600436106101a55760003560e01c80638b4c40b0116100e1578063bf653a5c1161008a578063e965084c11610064578063e965084c146105f1578063e9e05c421461068d578063f0498750146106a0578063f2b4e617146106cb57600080fd5b8063bf653a5c146104fd578063c0c53b8b14610530578063cff0ab961461055057600080fd5b80639bf62d82116100bb5780639bf62d8214610480578063a14238e7146104ad578063a35d99df146104dd57600080fd5b80638b4c40b0146101ca5780638c3152e914610423578063952b27971461044357600080fd5b80634fd0434c1161014e578063724c184c11610128578063724c184c146103ae5780637af1906d146103c35780637d6be8dc146103e35780637fc485041461040357600080fd5b80634fd0434c1461030157806354fd4d50146103435780635c975abb1461039957600080fd5b8063452a93201161017f578063452a93201461028c57806345884d32146102a15780634870496f146102e157600080fd5b806333d7e2bd146101d157806335e80ab3146102285780633c9f397c1461025a57600080fd5b366101cc576101ca3334620186a06000604051806020016040528060008152506106f8565b005b600080fd5b3480156101dd57600080fd5b506037546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023457600080fd5b506035546101fe90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561026657600080fd5b50603b546102779063ffffffff1681565b60405163ffffffff909116815260200161021f565b34801561029857600080fd5b506101fe610993565b3480156102ad57600080fd5b506102d16102bc366004614
fe4565b603a6020526000908152604090205460ff1681565b604051901515815260200161021f565b3480156102ed57600080fd5b506101ca6102fc3660046151bc565b610a2b565b34801561030d57600080fd5b50603b5461032a90640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161021f565b34801561034f57600080fd5b5061038c6040518060400160405280600581526020017f332e342e3000000000000000000000000000000000000000000000000000000081525081565b60405161021f919061530e565b3480156103a557600080fd5b506102d16113b5565b3480156103ba57600080fd5b506101fe611448565b3480156103cf57600080fd5b506101ca6103de366004615321565b611452565b3480156103ef57600080fd5b506101ca6103fe366004614fe4565b611c7a565b34801561040f57600080fd5b506101ca61041e36600461534c565b611d8b565b34801561042f57600080fd5b506101ca61043e366004615369565b611ec1565b34801561044f57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405190815260200161021f565b34801561048c57600080fd5b506032546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104b957600080fd5b506102d16104c8366004615321565b60336020526000908152604090205460ff1681565b3480156104e957600080fd5b5061032a6104f83660046153bc565b61219e565b34801561050957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610472565b34801561053c57600080fd5b506101ca61054b3660046153d9565b6121bd565b34801561055c57600080fd5b506001546105b8906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161021f565b3480156105fd57600080fd5b5061065861060c366004615321565b60396020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161021f565b6101ca61069b366004615432565b6106f8565b3480156106ac57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101fe565b3480156106d757600080fd5b506038546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a905083156107af5773ffffffffffffffffffffffffffffffffffffffff8716156107af57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6107b9835161219e565b67ffffffffffffffff168567ffffffffffffffff16101561085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b6201d4c0835111156108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016107a6565b333281146108eb575033731111000000000000000000000000000000001111015b600034888888886040516020016109069594939291906154b1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610976919061530e565b60405180910390a4505061098a8282612426565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190615516565b905090565b610a336113b5565b15610a9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016107a6565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016107a6565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf19190615533565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190615575565b603b5490915060ff848116911614610d01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b610d18610d133688900388018861558e565b612753565b8114610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016107a6565b6000610db1896127af565b60008181526039602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900467ffffffffffffffff169082015290915060018473ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190615623565b6002811115610e9057610e906155f4565b03610f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016107a6565b8051602082015167ffffffffffffffff161580610fb9575060018173ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa69190615623565b6002811115610fb757610fb76155f4565b145b80610fe9575073ffffffffffffffffffffffffffffffffffffffff81166000908152603a602052604090205460ff165b8061107c5750603b5463ffffffff1660ff166110768273ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106d9190615644565b63ffffffff1690565b60ff1614155b61112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152606060248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e2c20616e642074686560648201527f206f6c6420646973707574652067616d65206973206e6f7420696e76616c6964608482015260a4016107a6565b60408051602081018590526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111f79101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906111ed8b8d615661565b8d604001356127df565b611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016107a6565b60405180604001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506039600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050508b6040015173ffffffffffffffffffffffffffffffffffffffff168c6020015173ffffffffffffffffffffffffffffffffffffffff16857f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6260405160405180910390a4505050505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611424573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2691906156e5565b6000610a26610993565b600081815260396020908152604080832081518083018352905473ffffffffffffffffffffffffffffffffffffffff81168083527401000000000000000000000000000000000000000090910467ffffffffffffffff1682850152808552603a90935292205460ff1615611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016107a6565b816020015167ffffffffffffffff166000036115e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016107a6565b60006116678273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a9190615702565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016107a6565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff1642611771919061574e565b116117fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016107a6565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f9190615623565b6002811115611880576118806155f4565b1461190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2066696e616c697a65642079657400000000000060648201526084016107a6565b603b5463ffffffff1660ff166119678373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611049573d6000803e3d6000fd5b60ff16146119f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b603b5467ffffffffffffffff64010000000090910481169082161015611ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016107a6565b7f0000000000000000000000000000000000000000000000000000000000000000611b348373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611636573d6000803e3d6000fd5b611b489067ffffffffffffffff164261574e565b11611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016107a6565b60008481526033602052604090205460ff1615611c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016107a6565b50505050565b611c82610993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7074696d69736d506f7274616c3a206f6e6c7920746865206775617264696160448201527f6e2063616e20626c61636b6c69737420646973707574652067616d657300000060648201526084016107a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611d93610993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4f7074696d69736d506f7274616c3a206f6e6c7920746865206775617264696160448201527f6e2063616e2073657420746865207265737065637465642067616d652074797060648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016107a6565b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611ec96113b5565b15611f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016107a6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016107a6565b6000611fe4826127af565b9050611fef81611452565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908401516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558301516080840151606085015160a086015161209193929190612803565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906120f690841515815260200190565b60405180910390a28015801561210c5750326001145b15612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107a6565b505050565b60006121ab826010615765565b6121b790615208615795565b92915050565b600054610100900460ff16158080156121dd5750600054600160ff909116105b806121f75750303b1580156121f7575060005460ff166001145b612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107a6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122e157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661239a57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6123a2612861565b8015611c7457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60015460009061245c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361574e565b90506000612468612974565b90506000816020015160ff16826000015163ffffffff1661248991906157f0565b905082156125c0576001546000906124c0908390700100000000000000000000000000000000900467ffffffffffffffff16615858565b90506000836040015160ff16836124d791906158cc565b6001546124f79084906fffffffffffffffffffffffffffffffff166158cc565b61250191906157f0565b6001549091506000906125529061252b9084906fffffffffffffffffffffffffffffffff16615988565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a35565b905060018611156125815761257e61252b82876040015160ff1660018a612579919061574e565b612a54565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906125f3908490700100000000000000000000000000000000900467ffffffffffffffff16615795565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156126d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016107a6565b600154600090612702906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166159fc565b9050600061271448633b9aca00612aa9565b61271e9083615a39565b905060005a61272d908861574e565b90508082111561274957612749612744828461574e565b612ac0565b5050505050505050565b60008160000151826020015183604001518460600151604051602001612792949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612792979096959101615a4d565b6000806127eb86612ae9565b90506127f981868686612b1b565b9695505050505050565b6000806000612813866000612b4b565b905080612849576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166128f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107a6565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611ebf5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190615aba565b6000612a4a612a448585612b69565b83612b79565b90505b9392505050565b6000670de0b6b3a7640000612a95612a6c85836157f0565b612a7e90670de0b6b3a7640000615858565b612a9085670de0b6b3a76400006158cc565b612b88565b612a9f90866158cc565b612a4a91906157f0565b600081831015612ab95781612a4d565b5090919050565b6000805a90505b825a612ad3908361574e565b101561219957612ae282615b76565b9150612ac7565b60608180519060200120604051602001612b0591815260200190565b6040516020818303038152906040529050919050565b6000612b4284612b2c878686612bb9565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ab95781612a4d565b6000818312612ab95781612a4d565b6000612a4d670de0b6b3a764000083612ba086613637565b612baa91906158cc565b612bb491906157f0565b61387b565b60606000845111612c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016107a6565b6000612c3184613aba565b90506000612c3e86613ba6565b9050600084604051602001612c5591815260200190565b60405160208183030381529060405290506000805b84518110156135ae576000858281518110612c8757612c87615bae565b602002602001015190508451831115612d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016107a6565b82600003612ddb5780518051602091820120604051612d7092612d4a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016107a6565b612f32565b805151602011612e915780518051602091820120604051612e0592612d4a92910190815260200190565b612dd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016107a6565b805184516020808701919091208251919092012014612f32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016107a6565b612f3e60106001615bdd565b8160200151510361311a57845183036130b257612f788160200151601081518110612f6b57612f6b615bae565b6020026020010151613c09565b9650600087511161300b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016107a6565b60018651613019919061574e565b82146130a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016107a6565b505050505050612a4d565b60008584815181106130c6576130c6615bae565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106130f1576130f1615bae565b6020026020010151905061310481613d69565b9550613111600186615bdd565b9450505061359b565b60028160200151510361351357600061313282613d8e565b905060008160008151811061314957613149615bae565b016020015160f81c90506000613160600283615bf5565b61316b906002615c17565b9050600061317c848360ff16613db2565b9050600061318a8a89613db2565b905060006131988383613de8565b90508083511461322a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016107a6565b60ff85166002148061323f575060ff85166003145b1561342e57808251146132d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016107a6565b6132ee8760200151600181518110612f6b57612f6b615bae565b9c5060008d5111613381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016107a6565b60018c5161338f919061574e565b881461341d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016107a6565b505050505050505050505050612a4d565b60ff85161580613441575060ff85166001145b156134805761346d876020015160018151811061346057613460615bae565b6020026020010151613d69565b9950613479818a615bdd565b9850613508565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016107a6565b50505050505061359b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016107a6565b50806135a681615b76565b915050612c6a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016107a6565b60008082136136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016107a6565b600060606136af84613e9c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138ac57506000919050565b680755bf798b4a1bf1e5821261391e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016107a6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff811115613ad857613ad8615001565b604051908082528060200260200182016040528015613b1d57816020015b6040805180820190915260608082526020820152815260200190600190039081613af65790505b50915060005b81811015613b9f576040518060400160405280858381518110613b4857613b48615bae565b60200260200101518152602001613b77868481518110613b6a57613b6a615bae565b6020026020010151613f72565b815250838281518110613b8c57613b8c615bae565b6020908102919091010152600101613b23565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613bfe578060011b82018184015160001a8060041c8253600f811660018301535050600101613bd0565b509295945050505050565b60606000806000613c1985613f85565b919450925090506000816001811115613c3457613c346155f4565b14613cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016107a6565b613ccb8284615bdd565b855114613d5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016107a6565b612b42856020015184846149f2565b60606020826000015110613d8557613d8082613c09565b6121b7565b6121b782614a86565b60606121b7613dad8360200151600081518110612f6b57612f6b615bae565b613ba6565b606082518210613dd157506040805160208101909152600081526121b7565b612a4d8383848651613de3919061574e565b614a9c565b6000808251845110613dfb578251613dfe565b83515b90505b8082108015613e855750828281518110613e1d57613e1d615bae565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613e5c57613e5c615bae565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613e9557816001019150613e01565b5092915050565b6000808211613f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016107a6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60606121b7613f8083614c74565b614d5d565b600080600080846000015111614043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016107a6565b6020840151805160001a607f81116140685760006001600094509450945050506149eb565b60b7811161427657600061407d60808361574e565b905080876000015111614138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016107a6565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806141b157507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016107a6565b50600195509350600092506149eb915050565b60bf81116145c457600061428b60b78361574e565b905080876000015111614346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016107a6565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016107a6565b600184015160088302610100031c603781116144e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016107a6565b6144f28184615bdd565b8951116145a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016107a6565b6145b2836001615bdd565b97509550600094506149eb9350505050565b60f781116146a55760006145d960c08361574e565b905080876000015111614694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016107a6565b6001955093508492506149eb915050565b60006146b260f78361574e565b90508087600001511161476d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016107a6565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361484b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016107a6565b600184015160088302610100031c6037811161490f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016107a6565b6149198184615bdd565b8951116149ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016107a6565b6149d9836001615bdd565b97509550600194506149eb9350505050565b9193909250565b60608167ffffffffffffffff811115614a0d57614a0d615001565b6040519080825280601f01601f191660200182016040528015614a37576020820181803683370190505b5090508115612a4d576000614a4c8486615bdd565b90506020820160005b84811015614a6d578281015182820152602001614a55565b84811115614a7c576000858301525b5050509392505050565b60606121b78260200151600084600001516149f2565b60608182601f011015614b0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016107a6565b828284011015614b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016107a6565b81830184511015614be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016107a6565b606082158015614c035760405191506000825260208201604052614c6b565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614c3c578051835260209283019201614c24565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614d3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016107a6565b50604080518082019091528151815260209182019181019190915290565b60606000806000614d6d85613f85565b919450925090506001816001811115614d8857614d886155f4565b14614e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016107a6565b8451614e218385615bdd565b14614eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016107a6565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614ec55790505093506000835b8651811015614fb357600080614f386040518060400160405280858c60000151614f1c919061574e565b8152602001858c60200151614f319190615bdd565b9052613f85565b509150915060405180604001604052808383614f549190615bdd565b8152602001848b60200151614f699190615bdd565b815250888581518110614f7e57614f7e615bae565b6020908102919091010152614f94600185615bdd565b9350614fa08183615bdd565b614faa9084615bdd565b92505050614ef2565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614fe157600080fd5b50565b600060208284031215614ff657600080fd5b8135612a4d81614fbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561507757615077615001565b604052919050565b600082601f83011261509057600080fd5b813567ffffffffffffffff8111156150aa576150aa615001565b6150db60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615030565b8181528460208386010111156150f057600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561511f57600080fd5b60405160c0810167ffffffffffffffff828210818311171561514357615143615001565b81604052829350843583526020850135915061515e82614fbf565b8160208401526040850135915061517482614fbf565b816040840152606085013560608401526080850135608084015260a08501359150808211156151a257600080fd5b506151af8582860161507f565b60a0830152505092915050565b600080600080600085870360e08112156151d557600080fd5b863567ffffffffffffffff808211156151ed57600080fd5b6151f98a838b0161510d565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561523257600080fd5b60408901955060c089013592508083111561524c57600080fd5b828901925089601f84011261526057600080fd5b823591508082111561527157600080fd5b508860208260051b840101111561528757600080fd5b959894975092955050506020019190565b60005b838110156152b357818101518382015260200161529b565b83811115611c745750506000910152565b600081518084526152dc816020860160208601615298565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a4d60208301846152c4565b60006020828403121561533357600080fd5b5035919050565b63ffffffff81168114614fe157600080fd5b60006020828403121561535e57600080fd5b8135612a4d8161533a565b60006020828403121561537b57600080fd5b813567ffffffffffffffff81111561539257600080fd5b61539e8482850161510d565b949350505050565b67ffffffffffffffff81168114614fe157600080fd5b6000602082840312156153ce57600080fd5b8135612a4d816153a6565b6000806000606084860312156153ee57600080fd5b83356153f981614fbf565b9250602084013561540981614fbf565b9150604084013561541981614fbf565b809150509250925092565b8015158114614fe157600080fd5b600080600080600060a0868803121561544a57600080fd5b853561545581614fbf565b945060208601359350604086013561546c816153a6565b9250606086013561547c81615424565b9150608086013567ffffffffffffffff81111561549857600080fd5b6154a48882890161507f565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615505816049850160208701615298565b919091016049019695505050505050565b60006020828403121561552857600080fd5b8151612a4d81614fbf565b60008060006060848603121561554857600080fd5b83516155538161533a565b6020850151909350615564816153a6565b604085015190925061541981614fbf565b60006020828403121561558757600080fd5b5051919050565b6000608082840312156155a057600080fd5b6040516080810181811067ffffffffffffffff821117156155c3576155c3615001565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561563557600080fd5b815160038110612a4d57600080fd5b60006020828403121561565657600080fd5b8151612a4d8161533a565b600067ffffffffffffffff8084111561567c5761567c615001565b8360051b602061568d818301615030565b8681529185019181810190368411156156a557600080fd5b865b848110156156d9578035868111156156bf5760008081fd5b6156cb36828b0161507f565b8452509183019183016156a7565b50979650505050505050565b6000602082840312156156f757600080fd5b8151612a4d81615424565b60006020828403121561571457600080fd5b8151612a4d816153a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156157605761576061571f565b500390565b600067ffffffffffffffff8083168185168183048111821515161561578c5761578c61571f565b02949350505050565b600067ffffffffffffffff8083168185168083038211156157b8576157b861571f565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157ff576157ff6157c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156158535761585361571f565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156158925761589261571f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156158c6576158c661571f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561590d5761590d61571f565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156159485761594861571f565b600087129250878205871284841616156159645761596461571f565b8785058712818416161561597a5761597a61571f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156159c2576159c261571f565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156159f6576159f661571f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615a3457615a3461571f565b500290565b600082615a4857615a486157c1565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a9860c08301846152c4565b98975050505050505050565b805160ff81168114615ab557600080fd5b919050565b600060c08284031215615acc57600080fd5b60405160c0810181811067ffffffffffffffff82111715615aef57615aef615001565b6040528251615afd8161533a565b8152615b0b60208401615aa4565b6020820152615b1c60408401615aa4565b60408201526060830151615b2f8161533a565b60608201526080830151615b428161533a565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615b6a57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615ba757615ba761571f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615bf057615bf061571f565b500190565b600060ff831680615c0857615c086157c1565b8060ff84160691505092915050565b600060ff821660ff841680821015615c3157615c3161571f
565b9003939250505056fea164736f6c634300080f000a"
func
init
()
{
func
init
()
{
...
...
packages/contracts-bedrock/semver-lock.json
View file @
ed8c2227
...
@@ -36,8 +36,8 @@
...
@@ -36,8 +36,8 @@
"sourceCodeHash"
:
"0xf549ae16033b63e7cb3e032898a6495e1a13090dc8dd1422f7f650076ae973f8"
"sourceCodeHash"
:
"0xf549ae16033b63e7cb3e032898a6495e1a13090dc8dd1422f7f650076ae973f8"
},
},
"src/L1/OptimismPortal2.sol"
:
{
"src/L1/OptimismPortal2.sol"
:
{
"initCodeHash"
:
"0x
d2947b6ce4c5976d550c84d72f14ead2c92f27449edc98ca8ef92b3e9c02b367
"
,
"initCodeHash"
:
"0x
3501f67714a63fe67ce1b7530bcaa2593f149f595a702034837006494ee8cb64
"
,
"sourceCodeHash"
:
"0x
477df849308119f516e21e3c44e72422c1afa919fad5351be5046d3ec9f0e11f
"
"sourceCodeHash"
:
"0x
11451fdf6a9c60331fb7413d946dae556410a64bcf761fe48f82e56812743424
"
},
},
"src/L1/ProtocolVersions.sol"
:
{
"src/L1/ProtocolVersions.sol"
:
{
"initCodeHash"
:
"0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8"
,
"initCodeHash"
:
"0x72cd467e8bcf019c02675d72ab762e088bcc9cc0f1a4e9f587fa4589f7fdd1b8"
,
...
...
packages/contracts-bedrock/src/L1/OptimismPortal2.sol
View file @
ed8c2227
...
@@ -117,8 +117,8 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
...
@@ -117,8 +117,8 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
}
}
/// @notice Semantic version.
/// @notice Semantic version.
/// @custom:semver 3.
3
.0
/// @custom:semver 3.
4
.0
string public constant version = "3.
3
.0";
string public constant version = "3.
4
.0";
/// @notice Constructs the OptimismPortal contract.
/// @notice Constructs the OptimismPortal contract.
constructor(
constructor(
...
@@ -267,6 +267,13 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
...
@@ -267,6 +267,13 @@ contract OptimismPortal2 is Initializable, ResourceMetering, ISemver {
bytes32 withdrawalHash = Hashing.hashWithdrawal(_tx);
bytes32 withdrawalHash = Hashing.hashWithdrawal(_tx);
ProvenWithdrawal memory provenWithdrawal = provenWithdrawals[withdrawalHash];
ProvenWithdrawal memory provenWithdrawal = provenWithdrawals[withdrawalHash];
// We do not allow for proving withdrawals against dispute games that have resolved against the favor
// of the root claim.
require(
gameProxy.status() != GameStatus.CHALLENGER_WINS,
"OptimismPortal: cannot prove against invalid dispute games"
);
// We generally want to prevent users from proving the same withdrawal multiple times
// We generally want to prevent users from proving the same withdrawal multiple times
// because each successive proof will update the timestamp. A malicious user can take
// because each successive proof will update the timestamp. A malicious user can take
// advantage of this to prevent other users from finalizing their withdrawal. However,
// advantage of this to prevent other users from finalizing their withdrawal. However,
...
...
packages/contracts-bedrock/test/L1/OptimismPortal2.t.sol
View file @
ed8c2227
...
@@ -446,9 +446,9 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
...
@@ -446,9 +446,9 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
});
});
}
}
/// @dev Tests that `proveWithdrawalTransaction` reverts when the withdrawal has already
/// @dev Tests that `proveWithdrawalTransaction` reverts when the withdrawal has already
been proven, and the
///
been proven
.
///
re-prove attempt is for the same dispute game
.
function test_proveWithdrawalTransaction_replayProve_reverts() external {
function test_proveWithdrawalTransaction_replayProve_
sameGame_
reverts() external {
vm.expectEmit(true, true, true, true);
vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob);
emit WithdrawalProven(_withdrawalHash, alice, bob);
optimismPortal2.proveWithdrawalTransaction({
optimismPortal2.proveWithdrawalTransaction({
...
@@ -469,6 +469,64 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
...
@@ -469,6 +469,64 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
});
});
}
}
/// @dev Tests that `proveWithdrawalTransaction` reverts when the withdrawal has already been proven, and the first
/// game is currently being disputed, is otherwise not invalid, and has not been blacklisted.
function test_proveWithdrawalTransaction_replayProve_differentGameFirstGameGood_reverts() external {
vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob);
optimismPortal2.proveWithdrawalTransaction({
_tx: _defaultTx,
_disputeGameIndex: _proposedGameIndex,
_outputRootProof: _outputRootProof,
_withdrawalProof: _withdrawalProof
});
// Create a new dispute game, but don't mock anything about the first game.
disputeGameFactory.create(
optimismPortal2.respectedGameType(), Claim.wrap(_outputRoot), abi.encode(_proposedBlockNumber + 1)
);
_proposedGameIndex = disputeGameFactory.gameCount() - 1;
vm.expectRevert(
"OptimismPortal: withdrawal hash has already been proven, and the old dispute game is not invalid"
);
optimismPortal2.proveWithdrawalTransaction({
_tx: _defaultTx,
_disputeGameIndex: _proposedGameIndex,
_outputRootProof: _outputRootProof,
_withdrawalProof: _withdrawalProof
});
}
/// @dev Tests that `proveWithdrawalTransaction` reverts when the withdrawal has already been proven, and the new
/// game has the `CHALLENGER_WINS` status.
function test_proveWithdrawalTransaction_replayProve_differentGameChallengerWins_reverts() external {
vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob);
optimismPortal2.proveWithdrawalTransaction({
_tx: _defaultTx,
_disputeGameIndex: _proposedGameIndex,
_outputRootProof: _outputRootProof,
_withdrawalProof: _withdrawalProof
});
// Create a new dispute game, and mock both games to be CHALLENGER_WINS.
IDisputeGame game2 = disputeGameFactory.create(
optimismPortal2.respectedGameType(), Claim.wrap(_outputRoot), abi.encode(_proposedBlockNumber + 1)
);
_proposedGameIndex = disputeGameFactory.gameCount() - 1;
vm.mockCall(address(game), abi.encodeCall(game.status, ()), abi.encode(GameStatus.CHALLENGER_WINS));
vm.mockCall(address(game2), abi.encodeCall(game.status, ()), abi.encode(GameStatus.CHALLENGER_WINS));
vm.expectRevert("OptimismPortal: cannot prove against invalid dispute games");
optimismPortal2.proveWithdrawalTransaction({
_tx: _defaultTx,
_disputeGameIndex: _proposedGameIndex,
_outputRootProof: _outputRootProof,
_withdrawalProof: _withdrawalProof
});
}
/// @dev Tests that `proveWithdrawalTransaction` reverts if the dispute game being proven against is not of the
/// @dev Tests that `proveWithdrawalTransaction` reverts if the dispute game being proven against is not of the
/// respected game type.
/// respected game type.
function test_proveWithdrawalTransaction_badGameType_reverts() external {
function test_proveWithdrawalTransaction_badGameType_reverts() external {
...
@@ -503,6 +561,14 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
...
@@ -503,6 +561,14 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
vm.prank(optimismPortal2.guardian());
vm.prank(optimismPortal2.guardian());
optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game)));
optimismPortal2.blacklistDisputeGame(IDisputeGame(address(game)));
// Mock the status of the dispute game we just proved against to be CHALLENGER_WINS.
vm.mockCall(address(game), abi.encodeCall(game.status, ()), abi.encode(GameStatus.CHALLENGER_WINS));
// Create a new game to re-prove against
disputeGameFactory.create(
optimismPortal2.respectedGameType(), Claim.wrap(_outputRoot), abi.encode(_proposedBlockNumber + 1)
);
_proposedGameIndex = disputeGameFactory.gameCount() - 1;
vm.expectEmit(true, true, true, true);
vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob);
emit WithdrawalProven(_withdrawalHash, alice, bob);
optimismPortal2.proveWithdrawalTransaction({
optimismPortal2.proveWithdrawalTransaction({
...
@@ -525,7 +591,13 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
...
@@ -525,7 +591,13 @@ contract OptimismPortal2_FinalizeWithdrawal_Test is CommonTest {
_withdrawalProof: _withdrawalProof
_withdrawalProof: _withdrawalProof
});
});
// Mock the status of the dispute game we just proved against to be CHALLENGER_WINS.
vm.mockCall(address(game), abi.encodeCall(game.status, ()), abi.encode(GameStatus.CHALLENGER_WINS));
vm.mockCall(address(game), abi.encodeCall(game.status, ()), abi.encode(GameStatus.CHALLENGER_WINS));
// Create a new game to re-prove against
disputeGameFactory.create(
optimismPortal2.respectedGameType(), Claim.wrap(_outputRoot), abi.encode(_proposedBlockNumber + 1)
);
_proposedGameIndex = disputeGameFactory.gameCount() - 1;
vm.expectEmit(true, true, true, true);
vm.expectEmit(true, true, true, true);
emit WithdrawalProven(_withdrawalHash, alice, bob);
emit WithdrawalProven(_withdrawalHash, alice, bob);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment