@layerzerolabs/lz-evm-oapp-v2 2.1.21 → 2.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -361,8 +361,8 @@
361
361
  "type": "function"
362
362
  }
363
363
  ],
364
- "bytecode": "0x60e06040523480156200001157600080fd5b5060405162002da338038062002da383398101604081905262000034916200013c565b81816200004133620000cf565b6001600160a01b03808316608052811660a0819052604080516352ae287960e01b815290516352ae2879916004808201926020929091908290030181865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b8919062000174565b6001600160a01b031660c052506200019992505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200013757600080fd5b919050565b600080604083850312156200015057600080fd5b6200015b836200011f565b91506200016b602084016200011f565b90509250929050565b6000602082840312156200018757600080fd5b62000192826200011f565b9392505050565b60805160a05160c051612bb7620001ec6000396000818161018d0152611b9b01526000818161029f015281816105f0015281816111d90152611384015260008181611a2f0152611bd90152612bb76000f3fe6080604052600436106100dd5760003560e01c80638e9e70991161007f578063bf7b5d7a11610059578063bf7b5d7a1461028d578063f0cd3836146102c1578063f2fde38b146102e1578063f8bcddf61461030157600080fd5b80638e9e709914610236578063afea44ef1461024b578063b9a1f5e71461026b57600080fd5b806352ae2879116100bb57806352ae28791461017b57806354fd4d50146101d4578063715018a6146101f65780638da5cb5b1461020b57600080fd5b806310f9cf3a146100e25780632913daa01461010457806350dfa9371461015b575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046120c1565b610321565b005b34801561011057600080fd5b5060005461013d9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61016e61016936600461215b565b610539565b6040516101529190612235565b34801561018757600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b3480156101e057600080fd5b5060408051600281526000602082015201610152565b34801561020257600080fd5b506101026105d4565b34801561021757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101af565b34801561024257600080fd5b5061016e6105e8565b34801561025757600080fd5b5061010261026636600461225e565b610859565b34801561027757600080fd5b506102806108b4565b604051610152919061227b565b34801561029957600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102cd57600080fd5b5061016e6102dc36600461215b565b610933565b3480156102ed57600080fd5b506101026102fc3660046122da565b610bd0565b34801561030d57600080fd5b5061010261031c366004612310565b610c8c565b3361dead1461035c576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061039c8787878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b905060008267ffffffffffffffff8111156103b9576103b9612385565b6040519080825280602002602001820160405280156103e2578160200160208202803683370190505b50905060008367ffffffffffffffff81111561040057610400612385565b60405190808252806020026020018201604052801561043357816020015b606081526020019060019003908161041e5790505b50905060005b8481101561051857366000878784818110610456576104566123b4565b905060200281019061046891906123e3565b909250905061047b600460008385612448565b61048491612472565b60e01c858481518110610499576104996123b4565b63ffffffff909216602092830291909101909101526104bb8160048185612448565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505086518792508691508110610503576105036123b4565b60209081029190910101525050600101610439565b506105238383610e6a565b61052e838383610f54565b505050505050505050565b60603361dead14610576576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105b68686868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b90506105c1816110d2565b6105ca8161137d565b9695505050505050565b6105dc6114e4565b6105e66000611565565b565b6001546060907f000000000000000000000000000000000000000000000000000000000000000090819060009067ffffffffffffffff81111561062d5761062d612385565b60405190808252806020026020018201604052801561068857816020015b6106756040518060600160405280600063ffffffff16815260200160008152602001600081525090565b81526020019060019003908161064b5790505b50905060005b600154811015610830576000600182815481106106ad576106ad6123b4565b600091825260209182902060039190910201546040805160608101825263ffffffff90921680835290517f56a4728900000000000000000000000000000000000000000000000000000000815260048101829052909350909182019073ffffffffffffffffffffffffffffffffffffffff8716906356a4728990602401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906124ba565b81526040517f622f17f600000000000000000000000000000000000000000000000000000000815263ffffffff8416600482015260209091019073ffffffffffffffffffffffffffffffffffffffff87169063622f17f690602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080791906124ba565b81525083838151811061081c5761081c6123b4565b60209081029190910101525060010161068e565b5080604051602001610842919061227b565b604051602081830303815290604052935050505090565b6108616114e4565b6000805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561092a5760008481526020908190206040805160608101825260038602909201805463ffffffff168352600180820154848601526002909101549183019190915290835290920191016108d8565b50505050905090565b60603361dead14610970576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517e0200000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090910460c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166022820152602a01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060008515610a6557610a60610a5b8888888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b6115da565b610ade565b6001805480602002602001604051908101604052809291908181526020016000905b82821015610ad95760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101610a87565b505050505b805190915015610bc6578051604051610afd90849083906020016124d3565b604051602081830303815290604052925060005b8161ffff16811015610bc35783838281518110610b3057610b306123b4565b602002602001015160000151848381518110610b4e57610b4e6123b4565b602002602001015160200151858481518110610b6c57610b6c6123b4565b602002602001015160400151604051602001610b8b949392919061251d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529350600101610b11565b50505b5095945050505050565b610bd86114e4565b73ffffffffffffffffffffffffffffffffffffffff8116610c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c8981611565565b50565b610c946114e4565b610ca060016000612017565b60005b81811015610cf7576001838383818110610cbf57610cbf6123b4565b835460018101855560009485526020909420606090910292909201926003029091019050610ced8282612586565b5050600101610ca3565b505050565b60608267ffffffffffffffff811115610d1757610d17612385565b604051908082528060200260200182016040528015610dbd57816020015b604080516101608101825260006101008201818152610120830182905261014083018290528252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d355790505b50905060005b83811015610e6257366000868684818110610de057610de06123b4565b9050602002810190610df291906123e3565b91509150610e0082826118a1565b848481518110610e1257610e126123b4565b6020026020010181905250848381518110610e2f57610e2f6123b4565b6020026020010151848481518110610e4957610e496123b4565b6020908102919091010151608001525050600101610dc3565b509392505050565b815115610f00576000610e7c836115da565b905060005b8151811015610efd576000828281518110610e9e57610e9e6123b4565b6020026020010151600001519050610eb684826119d4565b610ef4576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b50600101610e81565b50505b6000610f0a611a2b565b9050610f1682826119d4565b610cf7576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b6000610f5e611a2b565b9050606060005b8451811015610fd6578263ffffffff16858281518110610f8757610f876123b4565b602002602001015163ffffffff1603610fce57838181518110610fac57610fac6123b4565b6020026020010151806020019051810190610fc79190612650565b9150610fd6565b600101610f65565b5060005b84518110156110ca576000858281518110610ff757610ff76123b4565b602002602001015190506000858381518110611015576110156123b4565b60200260200101518060200190518101906110309190612650565b9050600061103e8584611ac1565b509050600061104d8388611ac1565b915050808211156110ba576040517f1915975700000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e626f756e64436f756e74203e206f7574626f756e64436f756e74000000006044820152606401610c77565b505060019092019150610fda9050565b505050505050565b60005481517401000000000000000000000000000000000000000090910467ffffffffffffffff1610156111605760005481516040517f9db086050000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090920467ffffffffffffffff1660048301526024820152604401610c77565b805115610c895760008080805b845181101561137657600085828151811061118a5761118a6123b4565b602090810291909101810151805180519201516040517f5a0dfe4d00000000000000000000000000000000000000000000000000000000815263ffffffff9093166004840152602483015291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635a0dfe4d90604401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061272d565b611263575061136e565b80515163ffffffff80871691161080611295575080515163ffffffff8681169116148015611295575080516020015184115b156112cc576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80515163ffffffff86811691161415806112eb57508051602001518414155b1561130c578051805160209091015190955093506113098585611b5e565b92505b6113158361277e565b92508267ffffffffffffffff1681600001516040015167ffffffffffffffff161461136c576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60010161116d565b5050505050565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163463bd815db060e01b866040516024016113d391906127a5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161145c919061290b565b60006040518083038185875af1925050503d8060008114611499576040519150601f19603f3d011682016040523d82523d6000602084013e61149e565b606091505b509150915060006114af8383611c4d565b90506114b9611a2b565b816040516020016114cb929190612927565b6040516020818303038152906040529350505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c77565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006001805480602002602001604051908101604052809291908181526020016000905b828210156116525760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101611600565b5050505090506000835167ffffffffffffffff81111561167457611674612385565b6040519080825280602002602001820160405280156116dd57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116925790505b5090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005b85518110156117af576000868281518110611721576117216123b4565b602002602001015160000151600001519050600061173f8683611d6c565b90506000811215801561175b575060006117598684611d6c565b125b156117a5578361176a81612972565b94505085818151811061177f5761177f6123b4565b6020026020010151858581518110611799576117996123b4565b60200260200101819052505b5050600101611704565b50600081126118995760006117c58260016129aa565b90508067ffffffffffffffff8111156117e0576117e0612385565b60405190808252806020026020018201604052801561184957816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117fe5790505b50945060005b8181101561189657838181518110611869576118696123b4565b6020026020010151868281518110611883576118836123b4565b602090810291909101015260010161184f565b50505b505050919050565b6040805161016081018252600061010082018181526101208301829052610140830182905282526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260405180606001604052806119108585611de1565b63ffffffff1681526020016119258585611e04565b81526020016119348585611e1d565b67ffffffffffffffff169052815261194c8383611e40565b63ffffffff1660208201526119618383611e50565b73ffffffffffffffffffffffffffffffffffffffff1660408201526119868383611e62565b60608201526119958383611e72565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c082015292915050565b6000805b8351811015611a1f578263ffffffff168482815181106119fa576119fa6123b4565b602002602001015163ffffffff1603611a17576001915050611a25565b6001016119d8565b50600090505b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906129bd565b905090565b60008060005b8451811015611b4e578363ffffffff16858281518110611ae957611ae96123b4565b60200260200101516000015163ffffffff1603611b4657848181518110611b1257611b126123b4565b602002602001015160200151858281518110611b3057611b306123b4565b6020026020010151604001519250925050611b57565b600101611ac7565b50600080915091505b9250929050565b6040517fa0dd43fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015263ffffffff84166024830152604482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a0dd43fc90606401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4691906129da565b9392505050565b60608215611cb7576040517f614cbd8a00000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f2072657665727400000000000000000000000000000000000000000000006044820152606401610c77565b7f8351eea700000000000000000000000000000000000000000000000000000000611ce1836129f7565b7fffffffff000000000000000000000000000000000000000000000000000000001614611d3c57816040517f614cbd8a000000000000000000000000000000000000000000000000000000008152600401610c779190612235565b611d566004808451611d4e9190612a43565b849190611e8d565b905080806020019051810190611c469190612a56565b6000805b8351811015611db8578263ffffffff16848281518110611d9257611d926123b4565b60200260200101516000015163ffffffff1603611db0579050611a25565b600101611d70565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000611df1600d60098486612448565b611dfa91612472565b60e01c9392505050565b6000611e14602d600d8486612448565b611c4691612aff565b6000611e2d600960018486612448565b611e3691612b3b565b60c01c9392505050565b6000611df16031602d8486612448565b6000611c46611e5f8484612007565b90565b6000611e14607160518486612448565b366000611e828360718187612448565b915091509250929050565b606081611e9b81601f6129aa565b1015611f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610c77565b611f0d82846129aa565b84511015611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610c77565b606082158015611f965760405191506000825260208201604052611ffe565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fcf578051835260209283019201611fb7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000611e14605160318486612448565b5080546000825560030290600052602060002090810190610c8991905b808211156120785780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001681556000600182018190556002820155600301612034565b5090565b60008083601f84011261208e57600080fd5b50813567ffffffffffffffff8111156120a657600080fd5b6020830191508360208260051b8501011115611b5757600080fd5b600080600080600080606087890312156120da57600080fd5b863567ffffffffffffffff808211156120f257600080fd5b6120fe8a838b0161207c565b9098509650602089013591508082111561211757600080fd5b6121238a838b0161207c565b9096509450604089013591508082111561213c57600080fd5b5061214989828a0161207c565b979a9699509497509295939492505050565b6000806000806040858703121561217157600080fd5b843567ffffffffffffffff8082111561218957600080fd5b6121958883890161207c565b909650945060208701359150808211156121ae57600080fd5b506121bb8782880161207c565b95989497509550505050565b60005b838110156121e25781810151838201526020016121ca565b50506000910152565b600081518084526122038160208601602086016121c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c4660208301846121eb565b67ffffffffffffffff81168114610c8957600080fd5b60006020828403121561227057600080fd5b8135611c4681612248565b602080825282518282018190526000919060409081850190868401855b828110156122cd578151805163ffffffff16855286810151878601528501518585015260609093019290850190600101612298565b5091979650505050505050565b6000602082840312156122ec57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611c4657600080fd5b6000806020838503121561232357600080fd5b823567ffffffffffffffff8082111561233b57600080fd5b818501915085601f83011261234f57600080fd5b81358181111561235e57600080fd5b86602060608302850101111561237357600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261241857600080fd5b83018035915067ffffffffffffffff82111561243357600080fd5b602001915036819003821315611b5757600080fd5b6000808585111561245857600080fd5b8386111561246557600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156124b25780818660040360031b1b83161692505b505092915050565b6000602082840312156124cc57600080fd5b5051919050565b600083516124e58184602088016121c7565b60f09390931b7fffff000000000000000000000000000000000000000000000000000000000000169190920190815260020192915050565b6000855161252f818460208a016121c7565b60e09590951b7fffffffff0000000000000000000000000000000000000000000000000000000016919094019081526004810192909252602482015260440192915050565b63ffffffff81168114610c8957600080fd5b813561259181612574565b63ffffffff81167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008354161782555060208201356001820155604082013560028201555050565b6040516060810167ffffffffffffffff811182821017156125fb576125fb612385565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561264857612648612385565b604052919050565b6000602080838503121561266357600080fd5b825167ffffffffffffffff8082111561267b57600080fd5b818501915085601f83011261268f57600080fd5b8151818111156126a1576126a1612385565b6126af848260051b01612601565b818152848101925060609182028401850191888311156126ce57600080fd5b938501935b828510156127215780858a0312156126eb5760008081fd5b6126f36125d8565b85516126fe81612574565b8152858701518782015260408087015190820152845293840193928501926126d3565b50979650505050505050565b60006020828403121561273f57600080fd5b81518015158114611c4657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361279b5761279b61274f565b6001019392505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156128fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610140612831858351805163ffffffff1682526020808201519083015260409081015167ffffffffffffffff16910152565b8882015160606128488188018363ffffffff169052565b89840151915060806128718189018473ffffffffffffffffffffffffffffffffffffffff169052565b9084015160a0888101919091529084015160c08089019190915290840151915060e0906128b58289018473ffffffffffffffffffffffffffffffffffffffff169052565b840151610100880184905291506128ce878401836121eb565b9301518684036101208801529291506128e9905081836121eb565b9689019694505050908601906001016127ce565b509098975050505050505050565b6000825161291d8184602087016121c7565b9190910192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008360e01b168152600082516129648160048501602087016121c7565b919091016004019392505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a3576129a361274f565b5060010190565b80820180821115611a2557611a2561274f565b6000602082840312156129cf57600080fd5b8151611c4681612574565b6000602082840312156129ec57600080fd5b8151611c4681612248565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156118995760049290920360031b82901b161692915050565b81810381811115611a2557611a2561274f565b600060208284031215612a6857600080fd5b815167ffffffffffffffff80821115612a8057600080fd5b818401915084601f830112612a9457600080fd5b815181811115612aa657612aa6612385565b612ad760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612601565b9150808252856020828501011115612aee57600080fd5b611ffe8160208401602086016121c7565b80356020831015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156124b25760089490940360031b84901b169092169291505056fea2646970667358221220da814a474a6d45420d704e18ad63f897a187c9c1defeaecb87aee4372766388964736f6c63430008160033",
365
- "deployedBytecode": "0x6080604052600436106100dd5760003560e01c80638e9e70991161007f578063bf7b5d7a11610059578063bf7b5d7a1461028d578063f0cd3836146102c1578063f2fde38b146102e1578063f8bcddf61461030157600080fd5b80638e9e709914610236578063afea44ef1461024b578063b9a1f5e71461026b57600080fd5b806352ae2879116100bb57806352ae28791461017b57806354fd4d50146101d4578063715018a6146101f65780638da5cb5b1461020b57600080fd5b806310f9cf3a146100e25780632913daa01461010457806350dfa9371461015b575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046120c1565b610321565b005b34801561011057600080fd5b5060005461013d9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61016e61016936600461215b565b610539565b6040516101529190612235565b34801561018757600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b3480156101e057600080fd5b5060408051600281526000602082015201610152565b34801561020257600080fd5b506101026105d4565b34801561021757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101af565b34801561024257600080fd5b5061016e6105e8565b34801561025757600080fd5b5061010261026636600461225e565b610859565b34801561027757600080fd5b506102806108b4565b604051610152919061227b565b34801561029957600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102cd57600080fd5b5061016e6102dc36600461215b565b610933565b3480156102ed57600080fd5b506101026102fc3660046122da565b610bd0565b34801561030d57600080fd5b5061010261031c366004612310565b610c8c565b3361dead1461035c576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061039c8787878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b905060008267ffffffffffffffff8111156103b9576103b9612385565b6040519080825280602002602001820160405280156103e2578160200160208202803683370190505b50905060008367ffffffffffffffff81111561040057610400612385565b60405190808252806020026020018201604052801561043357816020015b606081526020019060019003908161041e5790505b50905060005b8481101561051857366000878784818110610456576104566123b4565b905060200281019061046891906123e3565b909250905061047b600460008385612448565b61048491612472565b60e01c858481518110610499576104996123b4565b63ffffffff909216602092830291909101909101526104bb8160048185612448565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505086518792508691508110610503576105036123b4565b60209081029190910101525050600101610439565b506105238383610e6a565b61052e838383610f54565b505050505050505050565b60603361dead14610576576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105b68686868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b90506105c1816110d2565b6105ca8161137d565b9695505050505050565b6105dc6114e4565b6105e66000611565565b565b6001546060907f000000000000000000000000000000000000000000000000000000000000000090819060009067ffffffffffffffff81111561062d5761062d612385565b60405190808252806020026020018201604052801561068857816020015b6106756040518060600160405280600063ffffffff16815260200160008152602001600081525090565b81526020019060019003908161064b5790505b50905060005b600154811015610830576000600182815481106106ad576106ad6123b4565b600091825260209182902060039190910201546040805160608101825263ffffffff90921680835290517f56a4728900000000000000000000000000000000000000000000000000000000815260048101829052909350909182019073ffffffffffffffffffffffffffffffffffffffff8716906356a4728990602401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906124ba565b81526040517f622f17f600000000000000000000000000000000000000000000000000000000815263ffffffff8416600482015260209091019073ffffffffffffffffffffffffffffffffffffffff87169063622f17f690602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080791906124ba565b81525083838151811061081c5761081c6123b4565b60209081029190910101525060010161068e565b5080604051602001610842919061227b565b604051602081830303815290604052935050505090565b6108616114e4565b6000805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561092a5760008481526020908190206040805160608101825260038602909201805463ffffffff168352600180820154848601526002909101549183019190915290835290920191016108d8565b50505050905090565b60603361dead14610970576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517e0200000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090910460c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166022820152602a01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060008515610a6557610a60610a5b8888888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b6115da565b610ade565b6001805480602002602001604051908101604052809291908181526020016000905b82821015610ad95760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101610a87565b505050505b805190915015610bc6578051604051610afd90849083906020016124d3565b604051602081830303815290604052925060005b8161ffff16811015610bc35783838281518110610b3057610b306123b4565b602002602001015160000151848381518110610b4e57610b4e6123b4565b602002602001015160200151858481518110610b6c57610b6c6123b4565b602002602001015160400151604051602001610b8b949392919061251d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529350600101610b11565b50505b5095945050505050565b610bd86114e4565b73ffffffffffffffffffffffffffffffffffffffff8116610c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c8981611565565b50565b610c946114e4565b610ca060016000612017565b60005b81811015610cf7576001838383818110610cbf57610cbf6123b4565b835460018101855560009485526020909420606090910292909201926003029091019050610ced8282612586565b5050600101610ca3565b505050565b60608267ffffffffffffffff811115610d1757610d17612385565b604051908082528060200260200182016040528015610dbd57816020015b604080516101608101825260006101008201818152610120830182905261014083018290528252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d355790505b50905060005b83811015610e6257366000868684818110610de057610de06123b4565b9050602002810190610df291906123e3565b91509150610e0082826118a1565b848481518110610e1257610e126123b4565b6020026020010181905250848381518110610e2f57610e2f6123b4565b6020026020010151848481518110610e4957610e496123b4565b6020908102919091010151608001525050600101610dc3565b509392505050565b815115610f00576000610e7c836115da565b905060005b8151811015610efd576000828281518110610e9e57610e9e6123b4565b6020026020010151600001519050610eb684826119d4565b610ef4576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b50600101610e81565b50505b6000610f0a611a2b565b9050610f1682826119d4565b610cf7576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b6000610f5e611a2b565b9050606060005b8451811015610fd6578263ffffffff16858281518110610f8757610f876123b4565b602002602001015163ffffffff1603610fce57838181518110610fac57610fac6123b4565b6020026020010151806020019051810190610fc79190612650565b9150610fd6565b600101610f65565b5060005b84518110156110ca576000858281518110610ff757610ff76123b4565b602002602001015190506000858381518110611015576110156123b4565b60200260200101518060200190518101906110309190612650565b9050600061103e8584611ac1565b509050600061104d8388611ac1565b915050808211156110ba576040517f1915975700000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e626f756e64436f756e74203e206f7574626f756e64436f756e74000000006044820152606401610c77565b505060019092019150610fda9050565b505050505050565b60005481517401000000000000000000000000000000000000000090910467ffffffffffffffff1610156111605760005481516040517f9db086050000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090920467ffffffffffffffff1660048301526024820152604401610c77565b805115610c895760008080805b845181101561137657600085828151811061118a5761118a6123b4565b602090810291909101810151805180519201516040517f5a0dfe4d00000000000000000000000000000000000000000000000000000000815263ffffffff9093166004840152602483015291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635a0dfe4d90604401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061272d565b611263575061136e565b80515163ffffffff80871691161080611295575080515163ffffffff8681169116148015611295575080516020015184115b156112cc576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80515163ffffffff86811691161415806112eb57508051602001518414155b1561130c578051805160209091015190955093506113098585611b5e565b92505b6113158361277e565b92508267ffffffffffffffff1681600001516040015167ffffffffffffffff161461136c576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60010161116d565b5050505050565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163463bd815db060e01b866040516024016113d391906127a5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161145c919061290b565b60006040518083038185875af1925050503d8060008114611499576040519150601f19603f3d011682016040523d82523d6000602084013e61149e565b606091505b509150915060006114af8383611c4d565b90506114b9611a2b565b816040516020016114cb929190612927565b6040516020818303038152906040529350505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c77565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006001805480602002602001604051908101604052809291908181526020016000905b828210156116525760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101611600565b5050505090506000835167ffffffffffffffff81111561167457611674612385565b6040519080825280602002602001820160405280156116dd57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116925790505b5090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005b85518110156117af576000868281518110611721576117216123b4565b602002602001015160000151600001519050600061173f8683611d6c565b90506000811215801561175b575060006117598684611d6c565b125b156117a5578361176a81612972565b94505085818151811061177f5761177f6123b4565b6020026020010151858581518110611799576117996123b4565b60200260200101819052505b5050600101611704565b50600081126118995760006117c58260016129aa565b90508067ffffffffffffffff8111156117e0576117e0612385565b60405190808252806020026020018201604052801561184957816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117fe5790505b50945060005b8181101561189657838181518110611869576118696123b4565b6020026020010151868281518110611883576118836123b4565b602090810291909101015260010161184f565b50505b505050919050565b6040805161016081018252600061010082018181526101208301829052610140830182905282526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260405180606001604052806119108585611de1565b63ffffffff1681526020016119258585611e04565b81526020016119348585611e1d565b67ffffffffffffffff169052815261194c8383611e40565b63ffffffff1660208201526119618383611e50565b73ffffffffffffffffffffffffffffffffffffffff1660408201526119868383611e62565b60608201526119958383611e72565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c082015292915050565b6000805b8351811015611a1f578263ffffffff168482815181106119fa576119fa6123b4565b602002602001015163ffffffff1603611a17576001915050611a25565b6001016119d8565b50600090505b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906129bd565b905090565b60008060005b8451811015611b4e578363ffffffff16858281518110611ae957611ae96123b4565b60200260200101516000015163ffffffff1603611b4657848181518110611b1257611b126123b4565b602002602001015160200151858281518110611b3057611b306123b4565b6020026020010151604001519250925050611b57565b600101611ac7565b50600080915091505b9250929050565b6040517fa0dd43fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015263ffffffff84166024830152604482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a0dd43fc90606401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4691906129da565b9392505050565b60608215611cb7576040517f614cbd8a00000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f2072657665727400000000000000000000000000000000000000000000006044820152606401610c77565b7f8351eea700000000000000000000000000000000000000000000000000000000611ce1836129f7565b7fffffffff000000000000000000000000000000000000000000000000000000001614611d3c57816040517f614cbd8a000000000000000000000000000000000000000000000000000000008152600401610c779190612235565b611d566004808451611d4e9190612a43565b849190611e8d565b905080806020019051810190611c469190612a56565b6000805b8351811015611db8578263ffffffff16848281518110611d9257611d926123b4565b60200260200101516000015163ffffffff1603611db0579050611a25565b600101611d70565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000611df1600d60098486612448565b611dfa91612472565b60e01c9392505050565b6000611e14602d600d8486612448565b611c4691612aff565b6000611e2d600960018486612448565b611e3691612b3b565b60c01c9392505050565b6000611df16031602d8486612448565b6000611c46611e5f8484612007565b90565b6000611e14607160518486612448565b366000611e828360718187612448565b915091509250929050565b606081611e9b81601f6129aa565b1015611f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610c77565b611f0d82846129aa565b84511015611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610c77565b606082158015611f965760405191506000825260208201604052611ffe565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fcf578051835260209283019201611fb7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000611e14605160318486612448565b5080546000825560030290600052602060002090810190610c8991905b808211156120785780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001681556000600182018190556002820155600301612034565b5090565b60008083601f84011261208e57600080fd5b50813567ffffffffffffffff8111156120a657600080fd5b6020830191508360208260051b8501011115611b5757600080fd5b600080600080600080606087890312156120da57600080fd5b863567ffffffffffffffff808211156120f257600080fd5b6120fe8a838b0161207c565b9098509650602089013591508082111561211757600080fd5b6121238a838b0161207c565b9096509450604089013591508082111561213c57600080fd5b5061214989828a0161207c565b979a9699509497509295939492505050565b6000806000806040858703121561217157600080fd5b843567ffffffffffffffff8082111561218957600080fd5b6121958883890161207c565b909650945060208701359150808211156121ae57600080fd5b506121bb8782880161207c565b95989497509550505050565b60005b838110156121e25781810151838201526020016121ca565b50506000910152565b600081518084526122038160208601602086016121c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c4660208301846121eb565b67ffffffffffffffff81168114610c8957600080fd5b60006020828403121561227057600080fd5b8135611c4681612248565b602080825282518282018190526000919060409081850190868401855b828110156122cd578151805163ffffffff16855286810151878601528501518585015260609093019290850190600101612298565b5091979650505050505050565b6000602082840312156122ec57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611c4657600080fd5b6000806020838503121561232357600080fd5b823567ffffffffffffffff8082111561233b57600080fd5b818501915085601f83011261234f57600080fd5b81358181111561235e57600080fd5b86602060608302850101111561237357600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261241857600080fd5b83018035915067ffffffffffffffff82111561243357600080fd5b602001915036819003821315611b5757600080fd5b6000808585111561245857600080fd5b8386111561246557600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156124b25780818660040360031b1b83161692505b505092915050565b6000602082840312156124cc57600080fd5b5051919050565b600083516124e58184602088016121c7565b60f09390931b7fffff000000000000000000000000000000000000000000000000000000000000169190920190815260020192915050565b6000855161252f818460208a016121c7565b60e09590951b7fffffffff0000000000000000000000000000000000000000000000000000000016919094019081526004810192909252602482015260440192915050565b63ffffffff81168114610c8957600080fd5b813561259181612574565b63ffffffff81167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008354161782555060208201356001820155604082013560028201555050565b6040516060810167ffffffffffffffff811182821017156125fb576125fb612385565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561264857612648612385565b604052919050565b6000602080838503121561266357600080fd5b825167ffffffffffffffff8082111561267b57600080fd5b818501915085601f83011261268f57600080fd5b8151818111156126a1576126a1612385565b6126af848260051b01612601565b818152848101925060609182028401850191888311156126ce57600080fd5b938501935b828510156127215780858a0312156126eb5760008081fd5b6126f36125d8565b85516126fe81612574565b8152858701518782015260408087015190820152845293840193928501926126d3565b50979650505050505050565b60006020828403121561273f57600080fd5b81518015158114611c4657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361279b5761279b61274f565b6001019392505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156128fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610140612831858351805163ffffffff1682526020808201519083015260409081015167ffffffffffffffff16910152565b8882015160606128488188018363ffffffff169052565b89840151915060806128718189018473ffffffffffffffffffffffffffffffffffffffff169052565b9084015160a0888101919091529084015160c08089019190915290840151915060e0906128b58289018473ffffffffffffffffffffffffffffffffffffffff169052565b840151610100880184905291506128ce878401836121eb565b9301518684036101208801529291506128e9905081836121eb565b9689019694505050908601906001016127ce565b509098975050505050505050565b6000825161291d8184602087016121c7565b9190910192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008360e01b168152600082516129648160048501602087016121c7565b919091016004019392505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a3576129a361274f565b5060010190565b80820180821115611a2557611a2561274f565b6000602082840312156129cf57600080fd5b8151611c4681612574565b6000602082840312156129ec57600080fd5b8151611c4681612248565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156118995760049290920360031b82901b161692915050565b81810381811115611a2557611a2561274f565b600060208284031215612a6857600080fd5b815167ffffffffffffffff80821115612a8057600080fd5b818401915084601f830112612a9457600080fd5b815181811115612aa657612aa6612385565b612ad760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612601565b9150808252856020828501011115612aee57600080fd5b611ffe8160208401602086016121c7565b80356020831015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156124b25760089490940360031b84901b169092169291505056fea2646970667358221220da814a474a6d45420d704e18ad63f897a187c9c1defeaecb87aee4372766388964736f6c63430008160033",
364
+ "bytecode": "0x60e06040523480156200001157600080fd5b5060405162002da338038062002da383398101604081905262000034916200013c565b81816200004133620000cf565b6001600160a01b03808316608052811660a0819052604080516352ae287960e01b815290516352ae2879916004808201926020929091908290030181865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b8919062000174565b6001600160a01b031660c052506200019992505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200013757600080fd5b919050565b600080604083850312156200015057600080fd5b6200015b836200011f565b91506200016b602084016200011f565b90509250929050565b6000602082840312156200018757600080fd5b62000192826200011f565b9392505050565b60805160a05160c051612bb7620001ec6000396000818161018d0152611b9b01526000818161029f015281816105f0015281816111d90152611384015260008181611a2f0152611bd90152612bb76000f3fe6080604052600436106100dd5760003560e01c80638e9e70991161007f578063bf7b5d7a11610059578063bf7b5d7a1461028d578063f0cd3836146102c1578063f2fde38b146102e1578063f8bcddf61461030157600080fd5b80638e9e709914610236578063afea44ef1461024b578063b9a1f5e71461026b57600080fd5b806352ae2879116100bb57806352ae28791461017b57806354fd4d50146101d4578063715018a6146101f65780638da5cb5b1461020b57600080fd5b806310f9cf3a146100e25780632913daa01461010457806350dfa9371461015b575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046120c1565b610321565b005b34801561011057600080fd5b5060005461013d9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61016e61016936600461215b565b610539565b6040516101529190612235565b34801561018757600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b3480156101e057600080fd5b5060408051600281526000602082015201610152565b34801561020257600080fd5b506101026105d4565b34801561021757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101af565b34801561024257600080fd5b5061016e6105e8565b34801561025757600080fd5b5061010261026636600461225e565b610859565b34801561027757600080fd5b506102806108b4565b604051610152919061227b565b34801561029957600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102cd57600080fd5b5061016e6102dc36600461215b565b610933565b3480156102ed57600080fd5b506101026102fc3660046122da565b610bd0565b34801561030d57600080fd5b5061010261031c366004612310565b610c8c565b3361dead1461035c576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061039c8787878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b905060008267ffffffffffffffff8111156103b9576103b9612385565b6040519080825280602002602001820160405280156103e2578160200160208202803683370190505b50905060008367ffffffffffffffff81111561040057610400612385565b60405190808252806020026020018201604052801561043357816020015b606081526020019060019003908161041e5790505b50905060005b8481101561051857366000878784818110610456576104566123b4565b905060200281019061046891906123e3565b909250905061047b600460008385612448565b61048491612472565b60e01c858481518110610499576104996123b4565b63ffffffff909216602092830291909101909101526104bb8160048185612448565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505086518792508691508110610503576105036123b4565b60209081029190910101525050600101610439565b506105238383610e6a565b61052e838383610f54565b505050505050505050565b60603361dead14610576576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105b68686868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b90506105c1816110d2565b6105ca8161137d565b9695505050505050565b6105dc6114e4565b6105e66000611565565b565b6001546060907f000000000000000000000000000000000000000000000000000000000000000090819060009067ffffffffffffffff81111561062d5761062d612385565b60405190808252806020026020018201604052801561068857816020015b6106756040518060600160405280600063ffffffff16815260200160008152602001600081525090565b81526020019060019003908161064b5790505b50905060005b600154811015610830576000600182815481106106ad576106ad6123b4565b600091825260209182902060039190910201546040805160608101825263ffffffff90921680835290517f56a4728900000000000000000000000000000000000000000000000000000000815260048101829052909350909182019073ffffffffffffffffffffffffffffffffffffffff8716906356a4728990602401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906124ba565b81526040517f622f17f600000000000000000000000000000000000000000000000000000000815263ffffffff8416600482015260209091019073ffffffffffffffffffffffffffffffffffffffff87169063622f17f690602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080791906124ba565b81525083838151811061081c5761081c6123b4565b60209081029190910101525060010161068e565b5080604051602001610842919061227b565b604051602081830303815290604052935050505090565b6108616114e4565b6000805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561092a5760008481526020908190206040805160608101825260038602909201805463ffffffff168352600180820154848601526002909101549183019190915290835290920191016108d8565b50505050905090565b60603361dead14610970576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517e0200000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090910460c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166022820152602a01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060008515610a6557610a60610a5b8888888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b6115da565b610ade565b6001805480602002602001604051908101604052809291908181526020016000905b82821015610ad95760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101610a87565b505050505b805190915015610bc6578051604051610afd90849083906020016124d3565b604051602081830303815290604052925060005b8161ffff16811015610bc35783838281518110610b3057610b306123b4565b602002602001015160000151848381518110610b4e57610b4e6123b4565b602002602001015160200151858481518110610b6c57610b6c6123b4565b602002602001015160400151604051602001610b8b949392919061251d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529350600101610b11565b50505b5095945050505050565b610bd86114e4565b73ffffffffffffffffffffffffffffffffffffffff8116610c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c8981611565565b50565b610c946114e4565b610ca060016000612017565b60005b81811015610cf7576001838383818110610cbf57610cbf6123b4565b835460018101855560009485526020909420606090910292909201926003029091019050610ced8282612586565b5050600101610ca3565b505050565b60608267ffffffffffffffff811115610d1757610d17612385565b604051908082528060200260200182016040528015610dbd57816020015b604080516101608101825260006101008201818152610120830182905261014083018290528252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d355790505b50905060005b83811015610e6257366000868684818110610de057610de06123b4565b9050602002810190610df291906123e3565b91509150610e0082826118a1565b848481518110610e1257610e126123b4565b6020026020010181905250848381518110610e2f57610e2f6123b4565b6020026020010151848481518110610e4957610e496123b4565b6020908102919091010151608001525050600101610dc3565b509392505050565b815115610f00576000610e7c836115da565b905060005b8151811015610efd576000828281518110610e9e57610e9e6123b4565b6020026020010151600001519050610eb684826119d4565b610ef4576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b50600101610e81565b50505b6000610f0a611a2b565b9050610f1682826119d4565b610cf7576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b6000610f5e611a2b565b9050606060005b8451811015610fd6578263ffffffff16858281518110610f8757610f876123b4565b602002602001015163ffffffff1603610fce57838181518110610fac57610fac6123b4565b6020026020010151806020019051810190610fc79190612650565b9150610fd6565b600101610f65565b5060005b84518110156110ca576000858281518110610ff757610ff76123b4565b602002602001015190506000858381518110611015576110156123b4565b60200260200101518060200190518101906110309190612650565b9050600061103e8584611ac1565b509050600061104d8388611ac1565b915050808211156110ba576040517f1915975700000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e626f756e64436f756e74203e206f7574626f756e64436f756e74000000006044820152606401610c77565b505060019092019150610fda9050565b505050505050565b60005481517401000000000000000000000000000000000000000090910467ffffffffffffffff1610156111605760005481516040517f9db086050000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090920467ffffffffffffffff1660048301526024820152604401610c77565b805115610c895760008080805b845181101561137657600085828151811061118a5761118a6123b4565b602090810291909101810151805180519201516040517f5a0dfe4d00000000000000000000000000000000000000000000000000000000815263ffffffff9093166004840152602483015291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635a0dfe4d90604401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061272d565b611263575061136e565b80515163ffffffff80871691161080611295575080515163ffffffff8681169116148015611295575080516020015184115b156112cc576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80515163ffffffff86811691161415806112eb57508051602001518414155b1561130c578051805160209091015190955093506113098585611b5e565b92505b6113158361277e565b92508267ffffffffffffffff1681600001516040015167ffffffffffffffff161461136c576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60010161116d565b5050505050565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163463bd815db060e01b866040516024016113d391906127a5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161145c919061290b565b60006040518083038185875af1925050503d8060008114611499576040519150601f19603f3d011682016040523d82523d6000602084013e61149e565b606091505b509150915060006114af8383611c4d565b90506114b9611a2b565b816040516020016114cb929190612927565b6040516020818303038152906040529350505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c77565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006001805480602002602001604051908101604052809291908181526020016000905b828210156116525760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101611600565b5050505090506000835167ffffffffffffffff81111561167457611674612385565b6040519080825280602002602001820160405280156116dd57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116925790505b5090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005b85518110156117af576000868281518110611721576117216123b4565b602002602001015160000151600001519050600061173f8683611d6c565b90506000811215801561175b575060006117598684611d6c565b125b156117a5578361176a81612972565b94505085818151811061177f5761177f6123b4565b6020026020010151858581518110611799576117996123b4565b60200260200101819052505b5050600101611704565b50600081126118995760006117c58260016129aa565b90508067ffffffffffffffff8111156117e0576117e0612385565b60405190808252806020026020018201604052801561184957816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117fe5790505b50945060005b8181101561189657838181518110611869576118696123b4565b6020026020010151868281518110611883576118836123b4565b602090810291909101015260010161184f565b50505b505050919050565b6040805161016081018252600061010082018181526101208301829052610140830182905282526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260405180606001604052806119108585611de1565b63ffffffff1681526020016119258585611e04565b81526020016119348585611e1d565b67ffffffffffffffff169052815261194c8383611e40565b63ffffffff1660208201526119618383611e50565b73ffffffffffffffffffffffffffffffffffffffff1660408201526119868383611e62565b60608201526119958383611e72565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c082015292915050565b6000805b8351811015611a1f578263ffffffff168482815181106119fa576119fa6123b4565b602002602001015163ffffffff1603611a17576001915050611a25565b6001016119d8565b50600090505b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906129bd565b905090565b60008060005b8451811015611b4e578363ffffffff16858281518110611ae957611ae96123b4565b60200260200101516000015163ffffffff1603611b4657848181518110611b1257611b126123b4565b602002602001015160200151858281518110611b3057611b306123b4565b6020026020010151604001519250925050611b57565b600101611ac7565b50600080915091505b9250929050565b6040517fa0dd43fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015263ffffffff84166024830152604482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a0dd43fc90606401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4691906129da565b9392505050565b60608215611cb7576040517f614cbd8a00000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f2072657665727400000000000000000000000000000000000000000000006044820152606401610c77565b7f8351eea700000000000000000000000000000000000000000000000000000000611ce1836129f7565b7fffffffff000000000000000000000000000000000000000000000000000000001614611d3c57816040517f614cbd8a000000000000000000000000000000000000000000000000000000008152600401610c779190612235565b611d566004808451611d4e9190612a43565b849190611e8d565b905080806020019051810190611c469190612a56565b6000805b8351811015611db8578263ffffffff16848281518110611d9257611d926123b4565b60200260200101516000015163ffffffff1603611db0579050611a25565b600101611d70565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000611df1600d60098486612448565b611dfa91612472565b60e01c9392505050565b6000611e14602d600d8486612448565b611c4691612aff565b6000611e2d600960018486612448565b611e3691612b3b565b60c01c9392505050565b6000611df16031602d8486612448565b6000611c46611e5f8484612007565b90565b6000611e14607160518486612448565b366000611e828360718187612448565b915091509250929050565b606081611e9b81601f6129aa565b1015611f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610c77565b611f0d82846129aa565b84511015611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610c77565b606082158015611f965760405191506000825260208201604052611ffe565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fcf578051835260209283019201611fb7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000611e14605160318486612448565b5080546000825560030290600052602060002090810190610c8991905b808211156120785780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001681556000600182018190556002820155600301612034565b5090565b60008083601f84011261208e57600080fd5b50813567ffffffffffffffff8111156120a657600080fd5b6020830191508360208260051b8501011115611b5757600080fd5b600080600080600080606087890312156120da57600080fd5b863567ffffffffffffffff808211156120f257600080fd5b6120fe8a838b0161207c565b9098509650602089013591508082111561211757600080fd5b6121238a838b0161207c565b9096509450604089013591508082111561213c57600080fd5b5061214989828a0161207c565b979a9699509497509295939492505050565b6000806000806040858703121561217157600080fd5b843567ffffffffffffffff8082111561218957600080fd5b6121958883890161207c565b909650945060208701359150808211156121ae57600080fd5b506121bb8782880161207c565b95989497509550505050565b60005b838110156121e25781810151838201526020016121ca565b50506000910152565b600081518084526122038160208601602086016121c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c4660208301846121eb565b67ffffffffffffffff81168114610c8957600080fd5b60006020828403121561227057600080fd5b8135611c4681612248565b602080825282518282018190526000919060409081850190868401855b828110156122cd578151805163ffffffff16855286810151878601528501518585015260609093019290850190600101612298565b5091979650505050505050565b6000602082840312156122ec57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611c4657600080fd5b6000806020838503121561232357600080fd5b823567ffffffffffffffff8082111561233b57600080fd5b818501915085601f83011261234f57600080fd5b81358181111561235e57600080fd5b86602060608302850101111561237357600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261241857600080fd5b83018035915067ffffffffffffffff82111561243357600080fd5b602001915036819003821315611b5757600080fd5b6000808585111561245857600080fd5b8386111561246557600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156124b25780818660040360031b1b83161692505b505092915050565b6000602082840312156124cc57600080fd5b5051919050565b600083516124e58184602088016121c7565b60f09390931b7fffff000000000000000000000000000000000000000000000000000000000000169190920190815260020192915050565b6000855161252f818460208a016121c7565b60e09590951b7fffffffff0000000000000000000000000000000000000000000000000000000016919094019081526004810192909252602482015260440192915050565b63ffffffff81168114610c8957600080fd5b813561259181612574565b63ffffffff81167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008354161782555060208201356001820155604082013560028201555050565b6040516060810167ffffffffffffffff811182821017156125fb576125fb612385565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561264857612648612385565b604052919050565b6000602080838503121561266357600080fd5b825167ffffffffffffffff8082111561267b57600080fd5b818501915085601f83011261268f57600080fd5b8151818111156126a1576126a1612385565b6126af848260051b01612601565b818152848101925060609182028401850191888311156126ce57600080fd5b938501935b828510156127215780858a0312156126eb5760008081fd5b6126f36125d8565b85516126fe81612574565b8152858701518782015260408087015190820152845293840193928501926126d3565b50979650505050505050565b60006020828403121561273f57600080fd5b81518015158114611c4657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361279b5761279b61274f565b6001019392505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156128fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610140612831858351805163ffffffff1682526020808201519083015260409081015167ffffffffffffffff16910152565b8882015160606128488188018363ffffffff169052565b89840151915060806128718189018473ffffffffffffffffffffffffffffffffffffffff169052565b9084015160a0888101919091529084015160c08089019190915290840151915060e0906128b58289018473ffffffffffffffffffffffffffffffffffffffff169052565b840151610100880184905291506128ce878401836121eb565b9301518684036101208801529291506128e9905081836121eb565b9689019694505050908601906001016127ce565b509098975050505050505050565b6000825161291d8184602087016121c7565b9190910192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008360e01b168152600082516129648160048501602087016121c7565b919091016004019392505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a3576129a361274f565b5060010190565b80820180821115611a2557611a2561274f565b6000602082840312156129cf57600080fd5b8151611c4681612574565b6000602082840312156129ec57600080fd5b8151611c4681612248565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156118995760049290920360031b82901b161692915050565b81810381811115611a2557611a2561274f565b600060208284031215612a6857600080fd5b815167ffffffffffffffff80821115612a8057600080fd5b818401915084601f830112612a9457600080fd5b815181811115612aa657612aa6612385565b612ad760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612601565b9150808252856020828501011115612aee57600080fd5b611ffe8160208401602086016121c7565b80356020831015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156124b25760089490940360031b84901b169092169291505056fea2646970667358221220df8518d684a60b399065b94aa7c0bee31a05af0f6b3619dafb201cb7c8d0dd2e64736f6c63430008160033",
365
+ "deployedBytecode": "0x6080604052600436106100dd5760003560e01c80638e9e70991161007f578063bf7b5d7a11610059578063bf7b5d7a1461028d578063f0cd3836146102c1578063f2fde38b146102e1578063f8bcddf61461030157600080fd5b80638e9e709914610236578063afea44ef1461024b578063b9a1f5e71461026b57600080fd5b806352ae2879116100bb57806352ae28791461017b57806354fd4d50146101d4578063715018a6146101f65780638da5cb5b1461020b57600080fd5b806310f9cf3a146100e25780632913daa01461010457806350dfa9371461015b575b600080fd5b3480156100ee57600080fd5b506101026100fd3660046120c1565b610321565b005b34801561011057600080fd5b5060005461013d9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61016e61016936600461215b565b610539565b6040516101529190612235565b34801561018757600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610152565b3480156101e057600080fd5b5060408051600281526000602082015201610152565b34801561020257600080fd5b506101026105d4565b34801561021757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101af565b34801561024257600080fd5b5061016e6105e8565b34801561025757600080fd5b5061010261026636600461225e565b610859565b34801561027757600080fd5b506102806108b4565b604051610152919061227b565b34801561029957600080fd5b506101af7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102cd57600080fd5b5061016e6102dc36600461215b565b610933565b3480156102ed57600080fd5b506101026102fc3660046122da565b610bd0565b34801561030d57600080fd5b5061010261031c366004612310565b610c8c565b3361dead1461035c576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061039c8787878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b905060008267ffffffffffffffff8111156103b9576103b9612385565b6040519080825280602002602001820160405280156103e2578160200160208202803683370190505b50905060008367ffffffffffffffff81111561040057610400612385565b60405190808252806020026020018201604052801561043357816020015b606081526020019060019003908161041e5790505b50905060005b8481101561051857366000878784818110610456576104566123b4565b905060200281019061046891906123e3565b909250905061047b600460008385612448565b61048491612472565b60e01c858481518110610499576104996123b4565b63ffffffff909216602092830291909101909101526104bb8160048185612448565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505086518792508691508110610503576105036123b4565b60209081029190910101525050600101610439565b506105238383610e6a565b61052e838383610f54565b505050505050505050565b60603361dead14610576576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105b68686868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b90506105c1816110d2565b6105ca8161137d565b9695505050505050565b6105dc6114e4565b6105e66000611565565b565b6001546060907f000000000000000000000000000000000000000000000000000000000000000090819060009067ffffffffffffffff81111561062d5761062d612385565b60405190808252806020026020018201604052801561068857816020015b6106756040518060600160405280600063ffffffff16815260200160008152602001600081525090565b81526020019060019003908161064b5790505b50905060005b600154811015610830576000600182815481106106ad576106ad6123b4565b600091825260209182902060039190910201546040805160608101825263ffffffff90921680835290517f56a4728900000000000000000000000000000000000000000000000000000000815260048101829052909350909182019073ffffffffffffffffffffffffffffffffffffffff8716906356a4728990602401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b91906124ba565b81526040517f622f17f600000000000000000000000000000000000000000000000000000000815263ffffffff8416600482015260209091019073ffffffffffffffffffffffffffffffffffffffff87169063622f17f690602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080791906124ba565b81525083838151811061081c5761081c6123b4565b60209081029190910101525060010161068e565b5080604051602001610842919061227b565b604051602081830303815290604052935050505090565b6108616114e4565b6000805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60606001805480602002602001604051908101604052809291908181526020016000905b8282101561092a5760008481526020908190206040805160608101825260038602909201805463ffffffff168352600180820154848601526002909101549183019190915290835290920191016108d8565b50505050905090565b60603361dead14610970576040517f9cbfe06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517e0200000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090910460c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166022820152602a01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060008515610a6557610a60610a5b8888888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610cfc92505050565b6115da565b610ade565b6001805480602002602001604051908101604052809291908181526020016000905b82821015610ad95760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101610a87565b505050505b805190915015610bc6578051604051610afd90849083906020016124d3565b604051602081830303815290604052925060005b8161ffff16811015610bc35783838281518110610b3057610b306123b4565b602002602001015160000151848381518110610b4e57610b4e6123b4565b602002602001015160200151858481518110610b6c57610b6c6123b4565b602002602001015160400151604051602001610b8b949392919061251d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529350600101610b11565b50505b5095945050505050565b610bd86114e4565b73ffffffffffffffffffffffffffffffffffffffff8116610c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610c8981611565565b50565b610c946114e4565b610ca060016000612017565b60005b81811015610cf7576001838383818110610cbf57610cbf6123b4565b835460018101855560009485526020909420606090910292909201926003029091019050610ced8282612586565b5050600101610ca3565b505050565b60608267ffffffffffffffff811115610d1757610d17612385565b604051908082528060200260200182016040528015610dbd57816020015b604080516101608101825260006101008201818152610120830182905261014083018290528252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610d355790505b50905060005b83811015610e6257366000868684818110610de057610de06123b4565b9050602002810190610df291906123e3565b91509150610e0082826118a1565b848481518110610e1257610e126123b4565b6020026020010181905250848381518110610e2f57610e2f6123b4565b6020026020010151848481518110610e4957610e496123b4565b6020908102919091010151608001525050600101610dc3565b509392505050565b815115610f00576000610e7c836115da565b905060005b8151811015610efd576000828281518110610e9e57610e9e6123b4565b6020026020010151600001519050610eb684826119d4565b610ef4576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b50600101610e81565b50505b6000610f0a611a2b565b9050610f1682826119d4565b610cf7576040517f01992f2a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c77565b6000610f5e611a2b565b9050606060005b8451811015610fd6578263ffffffff16858281518110610f8757610f876123b4565b602002602001015163ffffffff1603610fce57838181518110610fac57610fac6123b4565b6020026020010151806020019051810190610fc79190612650565b9150610fd6565b600101610f65565b5060005b84518110156110ca576000858281518110610ff757610ff76123b4565b602002602001015190506000858381518110611015576110156123b4565b60200260200101518060200190518101906110309190612650565b9050600061103e8584611ac1565b509050600061104d8388611ac1565b915050808211156110ba576040517f1915975700000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e626f756e64436f756e74203e206f7574626f756e64436f756e74000000006044820152606401610c77565b505060019092019150610fda9050565b505050505050565b60005481517401000000000000000000000000000000000000000090910467ffffffffffffffff1610156111605760005481516040517f9db086050000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090920467ffffffffffffffff1660048301526024820152604401610c77565b805115610c895760008080805b845181101561137657600085828151811061118a5761118a6123b4565b602090810291909101810151805180519201516040517f5a0dfe4d00000000000000000000000000000000000000000000000000000000815263ffffffff9093166004840152602483015291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635a0dfe4d90604401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611259919061272d565b611263575061136e565b80515163ffffffff80871691161080611295575080515163ffffffff8681169116148015611295575080516020015184115b156112cc576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80515163ffffffff86811691161415806112eb57508051602001518414155b1561130c578051805160209091015190955093506113098585611b5e565b92505b6113158361277e565b92508267ffffffffffffffff1681600001516040015167ffffffffffffffff161461136c576040517f50823c8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60010161116d565b5050505050565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163463bd815db060e01b866040516024016113d391906127a5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161145c919061290b565b60006040518083038185875af1925050503d8060008114611499576040519150601f19603f3d011682016040523d82523d6000602084013e61149e565b606091505b509150915060006114af8383611c4d565b90506114b9611a2b565b816040516020016114cb929190612927565b6040516020818303038152906040529350505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c77565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006001805480602002602001604051908101604052809291908181526020016000905b828210156116525760008481526020908190206040805160608101825260038602909201805463ffffffff16835260018082015484860152600290910154918301919091529083529092019101611600565b5050505090506000835167ffffffffffffffff81111561167457611674612385565b6040519080825280602002602001820160405280156116dd57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816116925790505b5090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005b85518110156117af576000868281518110611721576117216123b4565b602002602001015160000151600001519050600061173f8683611d6c565b90506000811215801561175b575060006117598684611d6c565b125b156117a5578361176a81612972565b94505085818151811061177f5761177f6123b4565b6020026020010151858581518110611799576117996123b4565b60200260200101819052505b5050600101611704565b50600081126118995760006117c58260016129aa565b90508067ffffffffffffffff8111156117e0576117e0612385565b60405190808252806020026020018201604052801561184957816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816117fe5790505b50945060005b8181101561189657838181518110611869576118696123b4565b6020026020010151868281518110611883576118836123b4565b602090810291909101015260010161184f565b50505b505050919050565b6040805161016081018252600061010082018181526101208301829052610140830182905282526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260405180606001604052806119108585611de1565b63ffffffff1681526020016119258585611e04565b81526020016119348585611e1d565b67ffffffffffffffff169052815261194c8383611e40565b63ffffffff1660208201526119618383611e50565b73ffffffffffffffffffffffffffffffffffffffff1660408201526119868383611e62565b60608201526119958383611e72565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c082015292915050565b6000805b8351811015611a1f578263ffffffff168482815181106119fa576119fa6123b4565b602002602001015163ffffffff1603611a17576001915050611a25565b6001016119d8565b50600090505b92915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc91906129bd565b905090565b60008060005b8451811015611b4e578363ffffffff16858281518110611ae957611ae96123b4565b60200260200101516000015163ffffffff1603611b4657848181518110611b1257611b126123b4565b602002602001015160200151858281518110611b3057611b306123b4565b6020026020010151604001519250925050611b57565b600101611ac7565b50600080915091505b9250929050565b6040517fa0dd43fc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015263ffffffff84166024830152604482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a0dd43fc90606401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4691906129da565b9392505050565b60608215611cb7576040517f614cbd8a00000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f2072657665727400000000000000000000000000000000000000000000006044820152606401610c77565b7f8351eea700000000000000000000000000000000000000000000000000000000611ce1836129f7565b7fffffffff000000000000000000000000000000000000000000000000000000001614611d3c57816040517f614cbd8a000000000000000000000000000000000000000000000000000000008152600401610c779190612235565b611d566004808451611d4e9190612a43565b849190611e8d565b905080806020019051810190611c469190612a56565b6000805b8351811015611db8578263ffffffff16848281518110611d9257611d926123b4565b60200260200101516000015163ffffffff1603611db0579050611a25565b600101611d70565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000611df1600d60098486612448565b611dfa91612472565b60e01c9392505050565b6000611e14602d600d8486612448565b611c4691612aff565b6000611e2d600960018486612448565b611e3691612b3b565b60c01c9392505050565b6000611df16031602d8486612448565b6000611c46611e5f8484612007565b90565b6000611e14607160518486612448565b366000611e828360718187612448565b915091509250929050565b606081611e9b81601f6129aa565b1015611f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610c77565b611f0d82846129aa565b84511015611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610c77565b606082158015611f965760405191506000825260208201604052611ffe565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611fcf578051835260209283019201611fb7565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000611e14605160318486612448565b5080546000825560030290600052602060002090810190610c8991905b808211156120785780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001681556000600182018190556002820155600301612034565b5090565b60008083601f84011261208e57600080fd5b50813567ffffffffffffffff8111156120a657600080fd5b6020830191508360208260051b8501011115611b5757600080fd5b600080600080600080606087890312156120da57600080fd5b863567ffffffffffffffff808211156120f257600080fd5b6120fe8a838b0161207c565b9098509650602089013591508082111561211757600080fd5b6121238a838b0161207c565b9096509450604089013591508082111561213c57600080fd5b5061214989828a0161207c565b979a9699509497509295939492505050565b6000806000806040858703121561217157600080fd5b843567ffffffffffffffff8082111561218957600080fd5b6121958883890161207c565b909650945060208701359150808211156121ae57600080fd5b506121bb8782880161207c565b95989497509550505050565b60005b838110156121e25781810151838201526020016121ca565b50506000910152565b600081518084526122038160208601602086016121c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c4660208301846121eb565b67ffffffffffffffff81168114610c8957600080fd5b60006020828403121561227057600080fd5b8135611c4681612248565b602080825282518282018190526000919060409081850190868401855b828110156122cd578151805163ffffffff16855286810151878601528501518585015260609093019290850190600101612298565b5091979650505050505050565b6000602082840312156122ec57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611c4657600080fd5b6000806020838503121561232357600080fd5b823567ffffffffffffffff8082111561233b57600080fd5b818501915085601f83011261234f57600080fd5b81358181111561235e57600080fd5b86602060608302850101111561237357600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261241857600080fd5b83018035915067ffffffffffffffff82111561243357600080fd5b602001915036819003821315611b5757600080fd5b6000808585111561245857600080fd5b8386111561246557600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156124b25780818660040360031b1b83161692505b505092915050565b6000602082840312156124cc57600080fd5b5051919050565b600083516124e58184602088016121c7565b60f09390931b7fffff000000000000000000000000000000000000000000000000000000000000169190920190815260020192915050565b6000855161252f818460208a016121c7565b60e09590951b7fffffffff0000000000000000000000000000000000000000000000000000000016919094019081526004810192909252602482015260440192915050565b63ffffffff81168114610c8957600080fd5b813561259181612574565b63ffffffff81167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008354161782555060208201356001820155604082013560028201555050565b6040516060810167ffffffffffffffff811182821017156125fb576125fb612385565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561264857612648612385565b604052919050565b6000602080838503121561266357600080fd5b825167ffffffffffffffff8082111561267b57600080fd5b818501915085601f83011261268f57600080fd5b8151818111156126a1576126a1612385565b6126af848260051b01612601565b818152848101925060609182028401850191888311156126ce57600080fd5b938501935b828510156127215780858a0312156126eb5760008081fd5b6126f36125d8565b85516126fe81612574565b8152858701518782015260408087015190820152845293840193928501926126d3565b50979650505050505050565b60006020828403121561273f57600080fd5b81518015158114611c4657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361279b5761279b61274f565b6001019392505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156128fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151610140612831858351805163ffffffff1682526020808201519083015260409081015167ffffffffffffffff16910152565b8882015160606128488188018363ffffffff169052565b89840151915060806128718189018473ffffffffffffffffffffffffffffffffffffffff169052565b9084015160a0888101919091529084015160c08089019190915290840151915060e0906128b58289018473ffffffffffffffffffffffffffffffffffffffff169052565b840151610100880184905291506128ce878401836121eb565b9301518684036101208801529291506128e9905081836121eb565b9689019694505050908601906001016127ce565b509098975050505050505050565b6000825161291d8184602087016121c7565b9190910192915050565b7fffffffff000000000000000000000000000000000000000000000000000000008360e01b168152600082516129648160048501602087016121c7565b919091016004019392505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129a3576129a361274f565b5060010190565b80820180821115611a2557611a2561274f565b6000602082840312156129cf57600080fd5b8151611c4681612574565b6000602082840312156129ec57600080fd5b8151611c4681612248565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156118995760049290920360031b82901b161692915050565b81810381811115611a2557611a2561274f565b600060208284031215612a6857600080fd5b815167ffffffffffffffff80821115612a8057600080fd5b818401915084601f830112612a9457600080fd5b815181811115612aa657612aa6612385565b612ad760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612601565b9150808252856020828501011115612aee57600080fd5b611ffe8160208401602086016121c7565b80356020831015611a25577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156124b25760089490940360031b84901b169092169291505056fea2646970667358221220df8518d684a60b399065b94aa7c0bee31a05af0f6b3619dafb201cb7c8d0dd2e64736f6c63430008160033",
366
366
  "linkReferences": {},
367
367
  "deployedLinkReferences": {}
368
368
  }
@@ -40,15 +40,48 @@
40
40
  "type": "function"
41
41
  },
42
42
  {
43
- "inputs": [],
44
- "name": "composeMsgSender",
45
- "outputs": [
43
+ "inputs": [
44
+ {
45
+ "components": [
46
+ {
47
+ "internalType": "uint32",
48
+ "name": "srcEid",
49
+ "type": "uint32"
50
+ },
51
+ {
52
+ "internalType": "bytes32",
53
+ "name": "sender",
54
+ "type": "bytes32"
55
+ },
56
+ {
57
+ "internalType": "uint64",
58
+ "name": "nonce",
59
+ "type": "uint64"
60
+ }
61
+ ],
62
+ "internalType": "struct Origin",
63
+ "name": "_origin",
64
+ "type": "tuple"
65
+ },
66
+ {
67
+ "internalType": "bytes",
68
+ "name": "_message",
69
+ "type": "bytes"
70
+ },
46
71
  {
47
72
  "internalType": "address",
48
- "name": "sender",
73
+ "name": "_sender",
49
74
  "type": "address"
50
75
  }
51
76
  ],
77
+ "name": "isComposeMsgSender",
78
+ "outputs": [
79
+ {
80
+ "internalType": "bool",
81
+ "name": "isSender",
82
+ "type": "bool"
83
+ }
84
+ ],
52
85
  "stateMutability": "view",
53
86
  "type": "function"
54
87
  },
@@ -0,0 +1,104 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "RateLimiter",
4
+ "sourceName": "contracts/oapp/utils/RateLimiter.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "name": "RateLimitExceeded",
9
+ "type": "error"
10
+ },
11
+ {
12
+ "anonymous": false,
13
+ "inputs": [
14
+ {
15
+ "components": [
16
+ {
17
+ "internalType": "uint32",
18
+ "name": "dstEid",
19
+ "type": "uint32"
20
+ },
21
+ {
22
+ "internalType": "uint256",
23
+ "name": "limit",
24
+ "type": "uint256"
25
+ },
26
+ {
27
+ "internalType": "uint256",
28
+ "name": "window",
29
+ "type": "uint256"
30
+ }
31
+ ],
32
+ "indexed": false,
33
+ "internalType": "struct RateLimiter.RateLimitConfig[]",
34
+ "name": "rateLimitConfigs",
35
+ "type": "tuple[]"
36
+ }
37
+ ],
38
+ "name": "RateLimitsChanged",
39
+ "type": "event"
40
+ },
41
+ {
42
+ "inputs": [
43
+ {
44
+ "internalType": "uint32",
45
+ "name": "_dstEid",
46
+ "type": "uint32"
47
+ }
48
+ ],
49
+ "name": "getAmountCanBeSent",
50
+ "outputs": [
51
+ {
52
+ "internalType": "uint256",
53
+ "name": "currentAmountInFlight",
54
+ "type": "uint256"
55
+ },
56
+ {
57
+ "internalType": "uint256",
58
+ "name": "amountCanBeSent",
59
+ "type": "uint256"
60
+ }
61
+ ],
62
+ "stateMutability": "view",
63
+ "type": "function"
64
+ },
65
+ {
66
+ "inputs": [
67
+ {
68
+ "internalType": "uint32",
69
+ "name": "dstEid",
70
+ "type": "uint32"
71
+ }
72
+ ],
73
+ "name": "rateLimits",
74
+ "outputs": [
75
+ {
76
+ "internalType": "uint256",
77
+ "name": "amountInFlight",
78
+ "type": "uint256"
79
+ },
80
+ {
81
+ "internalType": "uint256",
82
+ "name": "lastUpdated",
83
+ "type": "uint256"
84
+ },
85
+ {
86
+ "internalType": "uint256",
87
+ "name": "limit",
88
+ "type": "uint256"
89
+ },
90
+ {
91
+ "internalType": "uint256",
92
+ "name": "window",
93
+ "type": "uint256"
94
+ }
95
+ ],
96
+ "stateMutability": "view",
97
+ "type": "function"
98
+ }
99
+ ],
100
+ "bytecode": "0x",
101
+ "deployedBytecode": "0x",
102
+ "linkReferences": {},
103
+ "deployedLinkReferences": {}
104
+ }
@@ -498,19 +498,6 @@
498
498
  "stateMutability": "view",
499
499
  "type": "function"
500
500
  },
501
- {
502
- "inputs": [],
503
- "name": "composeMsgSender",
504
- "outputs": [
505
- {
506
- "internalType": "address",
507
- "name": "sender",
508
- "type": "address"
509
- }
510
- ],
511
- "stateMutability": "view",
512
- "type": "function"
513
- },
514
501
  {
515
502
  "inputs": [],
516
503
  "name": "decimalConversionRate",
@@ -622,6 +609,52 @@
622
609
  "stateMutability": "nonpayable",
623
610
  "type": "function"
624
611
  },
612
+ {
613
+ "inputs": [
614
+ {
615
+ "components": [
616
+ {
617
+ "internalType": "uint32",
618
+ "name": "srcEid",
619
+ "type": "uint32"
620
+ },
621
+ {
622
+ "internalType": "bytes32",
623
+ "name": "sender",
624
+ "type": "bytes32"
625
+ },
626
+ {
627
+ "internalType": "uint64",
628
+ "name": "nonce",
629
+ "type": "uint64"
630
+ }
631
+ ],
632
+ "internalType": "struct Origin",
633
+ "name": "",
634
+ "type": "tuple"
635
+ },
636
+ {
637
+ "internalType": "bytes",
638
+ "name": "",
639
+ "type": "bytes"
640
+ },
641
+ {
642
+ "internalType": "address",
643
+ "name": "_sender",
644
+ "type": "address"
645
+ }
646
+ ],
647
+ "name": "isComposeMsgSender",
648
+ "outputs": [
649
+ {
650
+ "internalType": "bool",
651
+ "name": "",
652
+ "type": "bool"
653
+ }
654
+ ],
655
+ "stateMutability": "view",
656
+ "type": "function"
657
+ },
625
658
  {
626
659
  "inputs": [
627
660
  {
@@ -381,19 +381,6 @@
381
381
  "stateMutability": "view",
382
382
  "type": "function"
383
383
  },
384
- {
385
- "inputs": [],
386
- "name": "composeMsgSender",
387
- "outputs": [
388
- {
389
- "internalType": "address",
390
- "name": "sender",
391
- "type": "address"
392
- }
393
- ],
394
- "stateMutability": "view",
395
- "type": "function"
396
- },
397
384
  {
398
385
  "inputs": [],
399
386
  "name": "decimalConversionRate",
@@ -444,6 +431,52 @@
444
431
  "stateMutability": "view",
445
432
  "type": "function"
446
433
  },
434
+ {
435
+ "inputs": [
436
+ {
437
+ "components": [
438
+ {
439
+ "internalType": "uint32",
440
+ "name": "srcEid",
441
+ "type": "uint32"
442
+ },
443
+ {
444
+ "internalType": "bytes32",
445
+ "name": "sender",
446
+ "type": "bytes32"
447
+ },
448
+ {
449
+ "internalType": "uint64",
450
+ "name": "nonce",
451
+ "type": "uint64"
452
+ }
453
+ ],
454
+ "internalType": "struct Origin",
455
+ "name": "",
456
+ "type": "tuple"
457
+ },
458
+ {
459
+ "internalType": "bytes",
460
+ "name": "",
461
+ "type": "bytes"
462
+ },
463
+ {
464
+ "internalType": "address",
465
+ "name": "_sender",
466
+ "type": "address"
467
+ }
468
+ ],
469
+ "name": "isComposeMsgSender",
470
+ "outputs": [
471
+ {
472
+ "internalType": "bool",
473
+ "name": "",
474
+ "type": "bool"
475
+ }
476
+ ],
477
+ "stateMutability": "view",
478
+ "type": "function"
479
+ },
447
480
  {
448
481
  "inputs": [
449
482
  {
@@ -381,19 +381,6 @@
381
381
  "stateMutability": "view",
382
382
  "type": "function"
383
383
  },
384
- {
385
- "inputs": [],
386
- "name": "composeMsgSender",
387
- "outputs": [
388
- {
389
- "internalType": "address",
390
- "name": "sender",
391
- "type": "address"
392
- }
393
- ],
394
- "stateMutability": "view",
395
- "type": "function"
396
- },
397
384
  {
398
385
  "inputs": [],
399
386
  "name": "decimalConversionRate",
@@ -444,6 +431,52 @@
444
431
  "stateMutability": "view",
445
432
  "type": "function"
446
433
  },
434
+ {
435
+ "inputs": [
436
+ {
437
+ "components": [
438
+ {
439
+ "internalType": "uint32",
440
+ "name": "srcEid",
441
+ "type": "uint32"
442
+ },
443
+ {
444
+ "internalType": "bytes32",
445
+ "name": "sender",
446
+ "type": "bytes32"
447
+ },
448
+ {
449
+ "internalType": "uint64",
450
+ "name": "nonce",
451
+ "type": "uint64"
452
+ }
453
+ ],
454
+ "internalType": "struct Origin",
455
+ "name": "",
456
+ "type": "tuple"
457
+ },
458
+ {
459
+ "internalType": "bytes",
460
+ "name": "",
461
+ "type": "bytes"
462
+ },
463
+ {
464
+ "internalType": "address",
465
+ "name": "_sender",
466
+ "type": "address"
467
+ }
468
+ ],
469
+ "name": "isComposeMsgSender",
470
+ "outputs": [
471
+ {
472
+ "internalType": "bool",
473
+ "name": "",
474
+ "type": "bool"
475
+ }
476
+ ],
477
+ "stateMutability": "view",
478
+ "type": "function"
479
+ },
447
480
  {
448
481
  "inputs": [
449
482
  {
@@ -15,7 +15,7 @@ abstract contract OAppReceiver is IOAppReceiver, OAppCore {
15
15
 
16
16
  // @dev The version of the OAppReceiver implementation.
17
17
  // @dev Version is bumped when changes are made to this contract.
18
- uint64 internal constant RECEIVER_VERSION = 1;
18
+ uint64 internal constant RECEIVER_VERSION = 2;
19
19
 
20
20
  /**
21
21
  * @notice Retrieves the OApp version information.
@@ -31,14 +31,24 @@ abstract contract OAppReceiver is IOAppReceiver, OAppCore {
31
31
  }
32
32
 
33
33
  /**
34
- * @notice Retrieves the address responsible for 'sending' composeMsg's to the Endpoint.
35
- * @return sender The address responsible for 'sending' composeMsg's to the Endpoint.
34
+ * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.
35
+ * @dev _origin The origin information containing the source endpoint and sender address.
36
+ * - srcEid: The source chain endpoint ID.
37
+ * - sender: The sender address on the src chain.
38
+ * - nonce: The nonce of the message.
39
+ * @dev _message The lzReceive payload.
40
+ * @param _sender The sender address.
41
+ * @return isSender Is a valid sender.
36
42
  *
37
- * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.
38
- * @dev The default sender IS the OApp implementer.
43
+ * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.
44
+ * @dev The default sender IS the OAppReceiver implementer.
39
45
  */
40
- function composeMsgSender() public view virtual returns (address sender) {
41
- return address(this);
46
+ function isComposeMsgSender(
47
+ Origin calldata /*_origin*/,
48
+ bytes calldata /*_message*/,
49
+ address _sender
50
+ ) public view virtual returns (bool) {
51
+ return _sender == address(this);
42
52
  }
43
53
 
44
54
  /**
@@ -92,6 +92,7 @@ abstract contract OmniCounterAbstract is ILayerZeroComposer, OApp, OAppPreCrimeS
92
92
  function brokenIncrement(uint32 _eid, uint8 _type, bytes calldata _options) external payable onlyAdmin {
93
93
  // bytes memory options = combineOptions(_eid, _type, _options);
94
94
  _lzSend(_eid, MsgCodec.encode(_type, eid), _options, MessagingFee(msg.value, 0), payable(msg.sender));
95
+ // _incrementOutbound(_eid); // mock method which intentionally does not increment outboundCount to cause a PreCrime Crime
95
96
  }
96
97
 
97
98
  function batchIncrement(