0 txs
0 calls
constructor
constructor(address _storage, address _p256, address _pcs, address _x509, address _crl)
functions
crlLib
viewfunction crlLib() view returns (address)
getAttestedData
viewfunction getAttestedData(bytes32 key) view returns (bytes attestationData)
getCert
viewfunction getCert(string qeid, string platformCpuSvn, string platformPceSvn, string pceid) view returns (bytes pckCert)
getCerts
viewfunction getCerts(string qeid, string pceid) view returns (string[] tcbms, bytes[] pckCerts)
getCollateralHash
viewfunction getCollateralHash(bytes32 key) view returns (bytes32 collateralHash)
getPckCertChain
viewfunction getPckCertChain(uint8 ca) view returns (bytes intermediateCert, bytes rootCert)
getPlatformTcbByIdAndSvns
viewfunction getPlatformTcbByIdAndSvns(string qeid, string pceid, string platformCpuSvn, string platformPceSvn) view returns (string tcbm)
P256_VERIFIER
viewfunction P256_VERIFIER() view returns (address)
PCK_KEY
purefunction PCK_KEY(bytes16 qeidBytes, bytes2 pceidBytes, bytes18 tcbmBytes) pure returns (bytes32 key)
pckLib
viewfunction pckLib() view returns (address)
Pcs
viewfunction Pcs() view returns (address)
resolver
viewfunction resolver() view returns (address)
TCB_MAPPING_KEY
purefunction TCB_MAPPING_KEY(bytes16 qeid, bytes2 pceid, bytes16 platformCpuSvn, bytes2 platformPceSvn) pure returns (bytes32 key)
x509
viewfunction x509() view returns (address)
upsertPckCert
nonpayablefunction upsertPckCert(uint8 ca, string qeid, string pceid, string tcbm, bytes cert) returns (bytes32 attestationId)
upsertPlatformTcbs
nonpayablefunction upsertPlatformTcbs(string qeid, string pceid, string platformCpuSvn, string platformPceSvn, string tcbm) returns (bytes32)
events
No events.
errors
Certificate_Expired
error Certificate_Expired()
Certificate_Revoked
error Certificate_Revoked(uint256 serialNum)
Expired_Certificates
error Expired_Certificates()
Invalid_Issuer_Name
error Invalid_Issuer_Name()
Invalid_PCK_CA
error Invalid_PCK_CA(uint8 ca)
Invalid_Signature
error Invalid_Signature()
Invalid_Subject_Name
error Invalid_Subject_Name()
Missing_Issuer
error Missing_Issuer()
Pck_Not_Found
error Pck_Not_Found()
TCB_Mismatch
error TCB_Mismatch()
creation bytecode
0x60c03461014557601f6133ba38819003918201601f19168301916001600160401b0383118484101761014a5780849260a0946040528339810103126101455761004781610160565b9061005460208201610160565b9061006160408201610160565b9161007a608061007360608501610160565b9301610160565b6001600160a01b0394851660805260a091909152600080549285166001600160a01b031993841681179091556001805494861694841694909417909355600280548316909317909255600380549290931691161790556040516132459081610175823960805181818161016201528181610ca501528181611e1601528181611f9c01528181612164015281816121e00152818161233f0152818161243f015281816124de0152818161256701528181612a500152612bda015260a05181818161093f0152612fbe0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101455756fe6080604052600436101561001257600080fd5b60003560e01c806304f3bcec1461011757806320348d8c14610112578063286858391461010d57806337b8762d146101085780633c7d71141461010357806348ac8059146100fe578063536c633d146100f957806359a517ff146100f45780635be0fa4b146100ef578063784aecf0146100ea5780637eb619c7146100e5578063b414d0b2146100e0578063bf721aaf146100db578063c925d17a146100d6578063d88d1df6146100d15763ec950d33146100cc57600080fd5b610ed8565b610e86565b610da0565b610c52565b610c25565b610b37565b610a92565b6109b5565b610963565b6108f4565b610817565b61070e565b6105f2565b6103fa565b610213565b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b600080fd5b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361018657565b602435907fffff0000000000000000000000000000000000000000000000000000000000008216820361018657565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000081160361018657565b346101865760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602061026961024f61018b565b6102576101ba565b60443591610264836101e9565b610f9f565b604051908152f35b9181601f840112156101865782359167ffffffffffffffff8311610186576020838186019501011161018657565b60005b8381106102b25750506000910152565b81810151838201526020016102a2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936102fe8151809281875287808801910161029f565b0116010190565b604081016040825282518091526060820190602060608260051b8501019401916000905b8282106103b157505050506020818303910152815180825260208201916020808360051b8301019401926000915b83831061036657505050505090565b90919293946020806103a2837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516102c2565b97019301930191939290610357565b909192946020806103ec837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0896001960301865289516102c2565b970192019201909291610329565b346101865760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101865760043567ffffffffffffffff811161018657610449903690600401610271565b9060243567ffffffffffffffff8111610186576104896104706104a8923690600401610271565b9190610481606095869736916110a3565b9236916110a3565b6104916110da565b6104996110da565b916104a26110da565b93611bf0565b5050506104b58183611d82565b91825190816104d2575b604051806104ce888883610305565b0390f35b9193509193506104e182611107565b926104eb83611107565b9460005b8481106104fc57506104bf565b806105a161057061059c61053b6105156001968861119d565b517fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b604051928391602083017fffffffffffffffffffffffffffffffffffff00000000000000000000000000006012921681520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610f59565b611eec565b6105ab828961119d565b526105b6818861119d565b506105d66105d16105ca610515848761119d565b8688610f9f565b612bbf565b6105e0828a61119d565b526105eb818961119d565b50016104ef565b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101865760043567ffffffffffffffff8111610186578161068d91600401610271565b9290929160243567ffffffffffffffff811161018657816106b091600401610271565b9290929160443567ffffffffffffffff811161018657816106d391600401610271565b929092916064359067ffffffffffffffff8211610186576106f691600401610271565b9091565b90602061070b9281815201906102c2565b90565b346101865761048161075361078961078461077661075b61074b61073136610644565b989660009e95949d93969e989192985060609e36916110a3565b9736916110a3565b9936916110a3565b906020966040519361076d8986610f59565b60008552611bf0565b5090828496949593956118ce565b611f53565b917fffffffffffffffffffffffffffffffffffff000000000000000000000000000083166107c9575b5050506104ce6040519283928084528301906102c2565b6107da939450906105d19291610f9f565b903880806107b2565b60043590600482101561018657565b909161080961070b936040845260408401906102c2565b9160208184039101526102c2565b346101865760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101865761084e6107e3565b60048110156108c557801580156108b2575b61087d5761086d9061123a565b906104ce604051928392836107f2565b60046108ac917f9849e774000000000000000000000000000000000000000000000000000000006000526111c0565b60246000fd5b506108bc816111b6565b60038114610860565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101865760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610186576109ec6107e3565b60243567ffffffffffffffff811161018657610a0c903690600401610271565b919060443567ffffffffffffffff811161018657610a2e903690600401610271565b60649391933567ffffffffffffffff811161018657610a51903690600401610271565b916084359567ffffffffffffffff8711610186576104ce97610a7a610a82983690600401610271565b97909661133f565b6040519081529081906020820190565b346101865760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657610ac961018b565b610ad16101ba565b906044357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361018657606435907fffff0000000000000000000000000000000000000000000000000000000000008216820361018657602093610269936118ce565b3461018657610481610b917fffffffffffffffffffffffffffffffffffff0000000000000000000000000000610bb5610784610bab61074b610b99610b7b36610644565b9796959e94919d929398909560609f36916110a3565b9a36916110a3565b906020976040519361076d8a86610f59565b50929190916118ce565b1680610bd1575b506104ce6040519283928084528301906102c2565b610bee91925060405190838201526012815261059c603282610f59565b9038610bbc565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60209101126101865760043590565b34610186576104ce610c3e610c3936610bf5565b6122fa565b6040519182916020835260208301906102c2565b3461018657610c6036610bf5565b6040517fe973fddc000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690600090602081602481865afa8015610d6a57610d1f9383928392610d6f575b5060405180809681947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa8015610d6a57602092826102699392610d47575b50508280825183010191016111db565b610d6392503d8091833e610d5b8183610f59565b8101906122d4565b3880610d37565b61122e565b610d9291925060203d602011610d99575b610d8a8183610f59565b8101906111db565b9038610ce5565b503d610d80565b346101865760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101865760043567ffffffffffffffff811161018657610def903690600401610271565b60243567ffffffffffffffff811161018657610e0f903690600401610271565b91909260443567ffffffffffffffff811161018657610e32903690600401610271565b9060643567ffffffffffffffff811161018657610e53903690600401610271565b9290916084359667ffffffffffffffff8811610186576104ce98610e7e610a82993690600401610271565b989097611ab9565b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018657602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f9a57604052565b610f2a565b917fffffffffffffffffffffffffffffffffffff0000000000000000000000000000907fffff000000000000000000000000000000000000000000000000000000000000604051937fffffffffffffffffffffffffffffffff0000000000000000000000000000000060208601967ff0e2a24600000000000000000000000000000000000000000000000000000000885216602486015216603484015216603682015260288152611051604882610f59565b51902090565b6040519061106761012083610f59565b565b67ffffffffffffffff8111610f9a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926110af82611069565b916110bd6040519384610f59565b829481845281830111610186578281602093846000960137010152565b604051906110e9602083610f59565b60008252565b67ffffffffffffffff8111610f9a5760051b60200190565b90611111826110ef565b61111e6040519182610f59565b82815260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061114e83956110ef565b01910160005b82811061116057505050565b606082820152602001611154565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156111b15760209160051b010190565b61116e565b600411156108c557565b9060048210156108c55752565b9061106760046024936111c0565b90816020910312610186575190565b60206000919392936112008160408101966111c0565b0152565b9060006020604084019361120081846111c0565b60206001919392936112008160408101966111c0565b6040513d6000823e3d90fd5b906112af602061127b61126260015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b93604051809381927fb13bf290000000000000000000000000000000000000000000000000000000008352600483016111ea565b0381865afa8015610d6a576112cc91600091611320575b50612bbf565b91602060405180927fb13bf290000000000000000000000000000000000000000000000000000000008252818061130560048201611204565b03915afa8015610d6a5761070b916000916113205750612bbf565b611339915060203d602011610d9957610d8a8183610f59565b386112c6565b9591979493929060048710156108c557861580156118bb575b61188a576113ab93929161137361137b9260009b36916110a3565b9336916110a3565b936020946104a2604051926113908885610f59565b8b8452604051946113a18987610f59565b8c865236916110a3565b97939892969150506113be3686856110a3565b936113e161126260025473ffffffffffffffffffffffffffffffffffffffff1690565b906040517fed3337850000000000000000000000000000000000000000000000000000000081528181806114188a600483016106fa565b0381865afa908115610d6a57859161186d575b5015611845578360405180937f3b79a61e00000000000000000000000000000000000000000000000000000000825281806114698b600483016106fa565b03915afa918215610d6a578492611821575b506101008201928351828151910120966060611496836111b6565b600283036117ec57506114c96114c56114ad612058565b85870151906020815191012090602081519101201490565b1590565b6117c4576114f36114c560808601516114e0612093565b6020815191012090602081519101201490565b61179c5760c0840151611507918c8c6127de565b61152961126260015473ffffffffffffffffffffffffffffffffffffffff1690565b90604051907fb13bf2900000000000000000000000000000000000000000000000000000000082528382806115618460048301611218565b0381865afa918215610d6a578492611580918991611785575b506122fa565b9283516116ad575b6115c1935060405180809581947fb13bf290000000000000000000000000000000000000000000000000000000008352600483016111ea565b03915afa8015610d6a576115db91869161169057506122fa565b805190939015611668576115f7859151604051918280926120e5565b039060025afa15610d6a57611617916114c59160e0855191015190612ce7565b61164057509161163a9161163561070b96959461137387878b610f9f565b6120fc565b936121c7565b807fe7ef341f0000000000000000000000000000000000000000000000000000000060049252fd5b6004857fcd69d374000000000000000000000000000000000000000000000000000000008152fd5b6116a79150833d8511610d9957610d8a8183610f59565b3861157a565b9161170c91936116d561126260035473ffffffffffffffffffffffffffffffffffffffff1690565b87516040518095819482937fcedb9781000000000000000000000000000000000000000000000000000000008452600484016120ce565b03915afa908115610d6a578791611758575b5061172b57818391611588565b83517f167c231a000000000000000000000000000000000000000000000000000000008752600452602486fd5b6117789150843d861161177e575b6117708183610f59565b810190612005565b3861171e565b503d611766565b6116a79150843d8611610d9957610d8a8183610f59565b6004867f92ec707e000000000000000000000000000000000000000000000000000000008152fd5b6004867f1e7ab599000000000000000000000000000000000000000000000000000000008152fd5b6117f5836111b6565b6001831461180a575b6114c56114c9916114ad565b506114c96114c561181961201d565b9150506117fe565b61183e9192503d8086833e6118368183610f59565b8101906119aa565b903861147b565b6004847fdba942a2000000000000000000000000000000000000000000000000000000008152fd5b6118849150823d841161177e576117708183610f59565b3861142b565b6118b7877f9849e774000000000000000000000000000000000000000000000000000000006000526111cd565b6000fd5b506118c5876111b6565b60038714611358565b927fffffffffffffffffffffffffffffffff000000000000000000000000000000007fffff000000000000000000000000000000000000000000000000000000000000929383604051958360208801987f5b8e7b4e000000000000000000000000000000000000000000000000000000008a5216602488015216603486015216603684015216604682015260288152611051604882610f59565b81601f82011215610186576020815191019061198381611069565b926119916040519485610f59565b818452818301116101865761070b91602084019061029f565b6020818303126101865780519067ffffffffffffffff8211610186570161012081830312610186576119da611057565b9181518352602082015167ffffffffffffffff811161018657816119ff918401611968565b60208401526040820151604084015260608201516060840152608082015167ffffffffffffffff81116101865781611a38918401611968565b608084015260a082015167ffffffffffffffff81116101865781611a5d918401611968565b60a084015260c082015160c084015260e082015167ffffffffffffffff81116101865781611a8c918401611968565b60e084015261010082015167ffffffffffffffff811161018657611ab09201611968565b61010082015290565b6104a294611ae4611af494611adc611aec94611afc9e9c9b969d989d36916110a3565b9b36916110a3565b9636916110a3565b9536916110a3565b9436916110a3565b929391611b0d610c39858786610f9f565b94855115611bc657611b3761126260025473ffffffffffffffffffffffffffffffffffffffff1690565b93600060405180967f3b79a61e0000000000000000000000000000000000000000000000000000000082528180611b718c600483016106fa565b03915afa8015610d6a57611ba69760c0611b9c92611ba198600091611bab575b5001519088856127de565b6118ce565b612a39565b600090565b611bc091503d806000833e6118368183610f59565b38611b91565b7f82fba2950000000000000000000000000000000000000000000000000000000060005260046000fd5b90919293946000956000956000956000956000956020815114611d38575b506004815114611d1f575b506020815114611ccf575b506004815114611c8d575b506024815114611c3c5750565b61070b919250611c4e611c6591612af0565b71ffffffffffffffffffffffffffffffffffff1690565b60701b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b611cc8919450611c9f61ffff91612af0565b1660f01b7fffff0000000000000000000000000000000000000000000000000000000000001690565b9238611c2f565b611d18919650611cef6fffffffffffffffffffffffffffffffff91612af0565b1660801b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b9438611c24565b611d31919850611c9f61ffff91612af0565b9638611c19565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000919a50611d766fffffffffffffffffffffffffffffffff91612af0565b1660801b169838611c0e565b907fffff000000000000000000000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffff00000000000000000000000000000000604051937fa192c81d00000000000000000000000000000000000000000000000000000000855216600484015216602482015260008160448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610d6a57600091611e4a575090565b3d8083833e611e598183610f59565b810190602081830312611ee45780519067ffffffffffffffff8211611ee8570181601f82011215611ee457805190611e90826110ef565b93611e9e6040519586610f59565b82855260208086019360051b830101938411611ee15750602001905b828210611ec75750505090565b602080918351611ed6816101e9565b815201910190611eba565b80fd5b8280fd5b8380fd5b90815191604051926022600285019482800186526f30313233343536373839616263646566600f5201908201915b828103611f2f57506000815260200160405250565b60016002910191600f835116516001820153600f835160041c165181530190611f1a565b604051907f1d345bc6000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610d6a57600091611fd0575090565b90506020813d602011611ffd575b81611feb60209383610f59565b81010312610186575161070b816101e9565b3d9150611fde565b90816020910312610186575180151581036101865790565b6040519061202c604083610f59565b601a82527f496e74656c205347582050434b2050726f636573736f722043410000000000006020830152565b60405190612067604083610f59565b601982527f496e74656c205347582050434b20506c6174666f726d204341000000000000006020830152565b604051906120a2604083610f59565b601982527f496e74656c205347582050434b204365727469666963617465000000000000006020830152565b60409061070b9392815281602082015201906102c2565b906120f86020928281519485920161029f565b0190565b61214392604092835194859384937f5778ea3200000000000000000000000000000000000000000000000000000000855260048501526060602485015260648401906102c2565b9060448301520381600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610d6a57600091612198575090565b90506040813d6040116121bf575b816121b360409383610f59565b81010312610186575190565b3d91506121a6565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561018657600092836064927fffffffffffffffffffffffffffffffffffff00000000000000000000000000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000957fffff000000000000000000000000000000000000000000000000000000000000604051998a9889977faa1b52950000000000000000000000000000000000000000000000000000000089521660048801521660248601521660448401525af18015610d6a576122be5750565b806122cb60008093610f59565b80031261018657565b9060208282031261018657815167ffffffffffffffff81116101865761070b9201611968565b6040517f7fc1ca02000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690602081602481855afa8015610d6a576123b79260009283926123e2575b5060405180809581947f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa908115610d6a576000916123cd575090565b61070b91503d806000833e610d5b8183610f59565b6123fc91925060203d602011610d9957610d8a8183610f59565b903861237d565b9015612531576040517fe973fddc00000000000000000000000000000000000000000000000000000000815260048101919091526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610d6a576124c5916000918291612512575b505b604051809381927f9e5464b2000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610d6a576000916123cd575090565b61252b915060203d602011610d9957610d8a8183610f59565b3861248b565b6040517f7fc1ca0200000000000000000000000000000000000000000000000000000000815260048101919091526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610d6a576124c59160009182916125b9575b5061248d565b6125d2915060203d602011610d9957610d8a8183610f59565b386125b3565b9060808282031261018657815161ffff811681036101865792602083015167ffffffffffffffff811161018657830182601f8201121561018657805161261d816110ef565b9161262b6040519384610f59565b81835260208084019260051b8201019085821161018657602001915b8183106126915750505092604081015167ffffffffffffffff81116101865783612672918301611968565b92606082015167ffffffffffffffff81116101865761070b9201611968565b825160ff8116810361018657815260209283019201612647565b9291906126c26020916040865260408601906102c2565b930152565b90602082519201517fffff000000000000000000000000000000000000000000000000000000000000811692600281106126ff575050565b7fffff000000000000000000000000000000000000000000000000000000000000929350829060020360031b1b161690565b60207fff0000000000000000000000000000000000000000000000000000000000000091612768600195948281519485920161029f565b019160f81b1681520190565b90602082519201517fffffffffffffffffffffffffffffffffffff0000000000000000000000000000811692601281106127ac575050565b7fffffffffffffffffffffffffffffffffffff0000000000000000000000000000929350829060120360031b1b161690565b9260009061284095929361280a61126260025473ffffffffffffffffffffffffffffffffffffffff1690565b906040518098819482937fe81c707e000000000000000000000000000000000000000000000000000000008452600484016126ab565b03915afa928315610d6a576000936000956000916129d5575b506128cd6128d2927fffff0000000000000000000000000000000000000000000000000000000000008061288f610570956126c7565b921691161495604051928391602083017fffff00000000000000000000000000000000000000000000000000000000000060029260f01b1681520190565b612e07565b9260009260605b86518510156129175760019061290f6128fc6128f5888b61119d565b5160ff1690565b9161057060405193849260208401612731565b9401936128d9565b7fffffffffffffffffffffffffffffffffffff000000000000000000000000000093965061296b91945061296661296091610570612990959860405194859360208501906120e5565b906120e5565b612774565b7fffffffffffffffffffffffffffffffffffff00000000000000000000000000001690565b9116148115916129cc575b506129a257565b7f4a629e240000000000000000000000000000000000000000000000000000000060005260046000fd5b9050153861299b565b7fffff000000000000000000000000000000000000000000000000000000000000965061288f955061057091506128d29287612a266128cd933d806000833e612a1e8183610f59565b8101906125d8565b9b92905099909a95505050509250612859565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b15610186576044600092837fffffffffffffffffffffffffffffffffffff00000000000000000000000000009560405196879586947faf9307f500000000000000000000000000000000000000000000000000000000865260048601521660248401525af18015610d6a57612ae55750565b600061106791610f59565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b01019082811015612ba75790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612b2e565b50925015612bb157565b63101827966000526004601cfd5b9060609173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051907f5c975abb000000000000000000000000000000000000000000000000000000008252602082600481845afa918215610d6a57600092612cc6575b508115612c57575b50612c495750565b61070b919250600090612403565b6040517f59d14b410000000000000000000000000000000000000000000000000000000081523360048201529150602090829060249082905afa908115610d6a57600091612ca7575b5038612c41565b612cc0915060203d60201161177e576117708183610f59565b38612ca0565b612ce091925060203d60201161177e576117708183610f59565b9038612c39565b91906040815103612d73576000612d4d9273ffffffffffffffffffffffffffffffffffffffff808354161660405180809681947f6d3537a000000000000000000000000000000000000000000000000000000000835260206004840181815201906102c2565b03915afa918215610d6a57600092612d7b575b506040825103612d735761070b92612f4a565b505050600090565b612d919192503d806000833e610d5b8183610f59565b9038612d60565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6020039060208211612dd557565b612d98565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612dd557565b805160609291815b612e17575050565b90927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840193808511612dd55782518510156111b157600160207fff00000000000000000000000000000000000000000000000000000000000000601f612ecb948701015116936040519481612e96879351809286808701910161029f565b8201908382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182610f59565b929081612e0f565b602081519101519060208110612ee7575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b15612f1b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000809161301f93600195612f72612f67612f6c612f678561302e565b612ed3565b9361313c565b90612f8b612f67612f85612f678461302e565b9261313c565b91604051936020850195865260408501526060840152608083015260a082015260a08152612fba60c082610f59565b51907f00000000000000000000000000000000000000000000000000000000000000005afa3d15613023576130103d91612ff383611069565b926130016040519485610f59565b83523d6000602085013e612f14565b602080825183010191016111db565b1490565b613010606091612f14565b8051602011610186576130416020611069565b9061304f6040519283610f59565b6020825261305d6020611069565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237602080920190915b60208110156130ee57806130cf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6130e36130de6130e892612dc7565b613200565b612dda565b906130c1565b90918251815260208101809111612dd5579160208101809111612dd557907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561308f57612d98565b80516040116101865761314f6020611069565b9061315d6040519283610f59565b6020825261316b6020611069565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060400160205b60208110156131b257806130cf57509192915050565b90918251815260208101809111612dd5579160208101809111612dd557907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561319c57612d98565b601f8111612dd5576101000a9056fea264697066735822122019ca5220976339a8139620b86af6c2e797e45435266f5bc2a8af63077f2d6cf264736f6c634300081b00330000000000000000000000002bbc0ccc218e63ad4d2bbb7bde1375b092fd38a20000000000000000000000000000000000000000000000000000000000000100000000000000000000000000cf171acd6c0a776f9d3e1f6cac8067c982ac6ce10000000000000000000000004aca9c0eb063401c9f5c2fc4487dbc5ccf1c9e2b0000000000000000000000006e204feae40f668a06e78a83b66185ffc8892dda