diff --git a/client/src/components/HealthCareProvider/HCManageDoctors.tsx b/client/src/components/HealthCareProvider/HCManageDoctors.tsx
index da57d4d..0fb902a 100644
--- a/client/src/components/HealthCareProvider/HCManageDoctors.tsx
+++ b/client/src/components/HealthCareProvider/HCManageDoctors.tsx
@@ -64,8 +64,8 @@ const HCManageDoctors: FunctionComponent<{}> = () => {
{doctorToProviderReqList &&
doctorToProviderReqList.length > 0 &&
- doctorToProviderReqList.map((req) => (
-
+ doctorToProviderReqList.map((req, idx) => (
+
|
{req.name}
|
@@ -85,7 +85,7 @@ const HCManageDoctors: FunctionComponent<{}> = () => {
className='bg-red-500 hover:bg-red-600 text-white font-bold py-2 px-4 rounded'
onClick={() => {
if (currentAccount) {
- updateProfile?.(currentAccount, req.address, 'rejected');
+ updateProfile?.(currentAccount, req.address, 'rejected', idx);
}
}}
>
@@ -96,7 +96,7 @@ const HCManageDoctors: FunctionComponent<{}> = () => {
className='bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded'
onClick={() => {
if (currentAccount) {
- updateProfile?.(currentAccount, req.address, 'confirmed');
+ updateProfile?.(currentAccount, req.address, 'confirmed', idx);
}
}}
//updateStatus('confirmed', appointment.appointment_id)
diff --git a/client/src/contracts/HealthBlock.ts b/client/src/contracts/HealthBlock.ts
index a514115..131203a 100644
--- a/client/src/contracts/HealthBlock.ts
+++ b/client/src/contracts/HealthBlock.ts
@@ -90,8 +90,8 @@ export interface HealthBlockInterface extends utils.Interface {
"getHCProviderInfoAll(address)": FunctionFragment;
"registerHCProvider(string,string,string,string)": FunctionFragment;
"getAllDoctorsForProvider(address)": FunctionFragment;
- "mapDoctorToProvider(address,address)": FunctionFragment;
- "declineDoctorToProviderRequest(address,address)": FunctionFragment;
+ "mapDoctorToProvider(address,address,uint256)": FunctionFragment;
+ "declineDoctorToProviderRequest(address,address,uint256)": FunctionFragment;
"raiseDoctorToProviderRequest(address,address,string)": FunctionFragment;
"getAllDoctorToProviderRequests(address)": FunctionFragment;
};
@@ -205,11 +205,19 @@ export interface HealthBlockInterface extends utils.Interface {
): string;
encodeFunctionData(
functionFragment: "mapDoctorToProvider",
- values: [PromiseOrValue, PromiseOrValue]
+ values: [
+ PromiseOrValue,
+ PromiseOrValue,
+ PromiseOrValue
+ ]
): string;
encodeFunctionData(
functionFragment: "declineDoctorToProviderRequest",
- values: [PromiseOrValue, PromiseOrValue]
+ values: [
+ PromiseOrValue,
+ PromiseOrValue,
+ PromiseOrValue
+ ]
): string;
encodeFunctionData(
functionFragment: "raiseDoctorToProviderRequest",
@@ -530,12 +538,14 @@ export interface HealthBlock extends BaseContract {
mapDoctorToProvider(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
declineDoctorToProviderRequest(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
@@ -666,12 +676,14 @@ export interface HealthBlock extends BaseContract {
mapDoctorToProvider(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
declineDoctorToProviderRequest(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
@@ -804,12 +816,14 @@ export interface HealthBlock extends BaseContract {
mapDoctorToProvider(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: CallOverrides
): Promise;
declineDoctorToProviderRequest(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: CallOverrides
): Promise;
@@ -976,12 +990,14 @@ export interface HealthBlock extends BaseContract {
mapDoctorToProvider(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
declineDoctorToProviderRequest(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
@@ -1086,12 +1102,14 @@ export interface HealthBlock extends BaseContract {
mapDoctorToProvider(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
declineDoctorToProviderRequest(
_providerAddress: PromiseOrValue,
_doctorAddress: PromiseOrValue,
+ idx: PromiseOrValue,
overrides?: Overrides & { from?: PromiseOrValue }
): Promise;
diff --git a/client/src/contracts/factories/HealthBlock__factory.ts b/client/src/contracts/factories/HealthBlock__factory.ts
index d7d4cd2..955c3b7 100644
--- a/client/src/contracts/factories/HealthBlock__factory.ts
+++ b/client/src/contracts/factories/HealthBlock__factory.ts
@@ -648,6 +648,11 @@ const _abi = [
name: "_doctorAddress",
type: "address",
},
+ {
+ internalType: "uint256",
+ name: "idx",
+ type: "uint256",
+ },
],
name: "mapDoctorToProvider",
outputs: [],
@@ -666,6 +671,11 @@ const _abi = [
name: "_doctorAddress",
type: "address",
},
+ {
+ internalType: "uint256",
+ name: "idx",
+ type: "uint256",
+ },
],
name: "declineDoctorToProviderRequest",
outputs: [],
@@ -734,7 +744,7 @@ const _abi = [
];
const _bytecode =
- "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506148cf806100606000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063939686dc116100b8578063b380f5c61161007c578063b380f5c614610358578063bc4fe40214610379578063c5b0aab014610395578063cc063706146103c8578063d7d1bbdb146103fa578063e1e36ab91461041657610137565b8063939686dc146102b6578063a89b1c94146102d2578063a9b467ee146102ee578063afc3b5c414610320578063b2d258ff1461033c57610137565b8063326df664116100ff578063326df664146101f35780635df122e1146102135780636d36f7be146102435780638813ce1214610277578063916922c41461029557610137565b80630869cfbc1461013c57806310b500cc1461016f578063139f09841461019f5780631c297205146101bb5780632d7788db146101d7575b600080fd5b61015660048036038101906101519190613762565b610449565b604051610166949392919061384a565b60405180910390f35b61018960048036038101906101849190613762565b6105b6565b6040516101969190613a0f565b60405180910390f35b6101b960048036038101906101b49190613a31565b6107ce565b005b6101d560048036038101906101d09190613bd2565b610cf0565b005b6101f160048036038101906101ec9190613c93565b610f29565b005b6101fb611125565b60405161020a93929190613cc0565b60405180910390f35b61022d60048036038101906102289190613762565b61134f565b60405161023a9190613e5a565b60405180910390f35b61025d60048036038101906102589190613e7c565b611616565b60405161026e959493929190613ebc565b60405180910390f35b61027f61182e565b60405161028c9190614057565b60405180910390f35b61029d611b85565b6040516102ad9493929190614079565b60405180910390f35b6102d060048036038101906102cb91906140da565b611ec0565b005b6102ec60048036038101906102e79190613a31565b61200e565b005b61030860048036038101906103039190613762565b612227565b60405161031793929190613cc0565b60405180910390f35b61033a60048036038101906103359190614149565b6123b0565b005b610356600480360381019061035191906141c1565b61259e565b005b6103606128ec565b604051610370949392919061427c565b60405180910390f35b610393600480360381019061038e91906142d6565b612baa565b005b6103af60048036038101906103aa9190613762565b612ec8565b6040516103bf9493929190614079565b60405180910390f35b6103e260048036038101906103dd9190613e7c565b613161565b6040516103f1939291906143ad565b60405180910390f35b610414600480360381019061040f9190613c93565b6132d8565b005b610430600480360381019061042b9190613762565b6134d4565b604051610440949392919061427c565b60405180910390f35b600460205280600052604060002060009150905080600001805461046c90614421565b80601f016020809104026020016040519081016040528092919081815260200182805461049890614421565b80156104e55780601f106104ba576101008083540402835291602001916104e5565b820191906000526020600020905b8154815290600101906020018083116104c857829003601f168201915b5050505050908060010160009054906101000a900460ff169080600201805461050d90614421565b80601f016020809104026020016040519081016040528092919081815260200182805461053990614421565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156107c3578382906000526020600020906003020160405180606001604052908160008201805461064a90614421565b80601f016020809104026020016040519081016040528092919081815260200182805461067690614421565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805461073290614421565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90614421565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b50505050508152505081526020019060010190610617565b505050509050919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508160ff161015610937578473ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260ff16815481106108cf576108ce614452565b5b906000526020600020906003020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361092457809250610937565b808061092f906144b0565b915050610817565b506040518060400160405280600981526020017f636f6e6669726d65640000000000000000000000000000000000000000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff16815481106109c2576109c1614452565b5b906000526020600020906003020160020190816109df9190614685565b50600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405280856000018054610a3990614421565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590614421565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b505050505081526020018560010160009054906101000a900460ff1660ff168152602001856002018054610ae590614421565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1190614421565b8015610b5e5780601f10610b3357610100808354040283529160200191610b5e565b820191906000526020600020905b815481529060010190602001808311610b4157829003601f168201915b50505050508152602001856003018054610b7790614421565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba390614421565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b505050505081526020018673ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019081610c529190614685565b5060208201518160010160006101000a81548160ff021916908360ff1602179055506040820151816002019081610c899190614685565b506060820151816003019081610c9f9190614685565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b604051602001610cff90614788565b6040516020818303038152906040528051906020012083604051602001610d2691906147ce565b6040516020818303038152906040528051906020012003610d4657600080fd5b604051602001610d5590614788565b6040516020818303038152906040528051906020012081604051602001610d7c91906147ce565b6040516020818303038152906040528051906020012003610d9c57600080fd5b60008260ff16118015610db2575060648260ff16105b610dbb57600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081610e499190614685565b5060208201518160010160006101000a81548160ff021916908360ff1602179055506040820151816002019081610e809190614685565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505082604051610ed991906147ce565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90614857565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061102b5761102a614452565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a65637465640000000000000000000000000000000000000000000000008152508160030190816110819190614685565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16116111cc57600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020182805461123590614421565b80601f016020809104026020016040519081016040528092919081815260200182805461126190614421565b80156112ae5780601f10611283576101008083540402835291602001916112ae565b820191906000526020600020905b81548152906001019060200180831161129157829003601f168201915b505050505092508080546112c190614421565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed90614421565b801561133a5780601f1061130f5761010080835404028352916020019161133a565b820191906000526020600020905b81548152906001019060200180831161131d57829003601f168201915b50505050509050955095509550505050909192565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561160b57838290600052602060002090600502016040518060a00160405290816000820180546113e390614421565b80601f016020809104026020016040519081016040528092919081815260200182805461140f90614421565b801561145c5780601f106114315761010080835404028352916020019161145c565b820191906000526020600020905b81548152906001019060200180831161143f57829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff16815260200160028201805461149290614421565b80601f01602080910402602001604051908101604052809291908181526020018280546114be90614421565b801561150b5780601f106114e05761010080835404028352916020019161150b565b820191906000526020600020905b8154815290600101906020018083116114ee57829003601f168201915b5050505050815260200160038201805461152490614421565b80601f016020809104026020016040519081016040528092919081815260200182805461155090614421565b801561159d5780601f106115725761010080835404028352916020019161159d565b820191906000526020600020905b81548152906001019060200180831161158057829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906113b0565b505050509050919050565b6002602052816000526040600020818154811061163257600080fd5b90600052602060002090600502016000915091505080600001805461165690614421565b80601f016020809104026020016040519081016040528092919081815260200182805461168290614421565b80156116cf5780601f106116a4576101008083540402835291602001916116cf565b820191906000526020600020905b8154815290600101906020018083116116b257829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020180546116f790614421565b80601f016020809104026020016040519081016040528092919081815260200182805461172390614421565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b50505050509080600301805461178590614421565b80601f01602080910402602001604051908101604052809291908181526020018280546117b190614421565b80156117fe5780601f106117d3576101008083540402835291602001916117fe565b820191906000526020600020905b8154815290600101906020018083116117e157829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614857565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611b7c57838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180546119c790614421565b80601f01602080910402602001604051908101604052809291908181526020018280546119f390614421565b8015611a405780601f10611a1557610100808354040283529160200191611a40565b820191906000526020600020905b815481529060010190602001808311611a2357829003601f168201915b50505050508152602001600282018054611a5990614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8590614421565b8015611ad25780601f10611aa757610100808354040283529160200191611ad2565b820191906000526020600020905b815481529060010190602001808311611ab557829003601f168201915b50505050508152602001600382018054611aeb90614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1790614421565b8015611b645780601f10611b3957610100808354040283529160200191611b64565b820191906000526020600020905b815481529060010190602001808311611b4757829003601f168201915b5050505050815250508152602001906001019061193e565b50505050905090565b606080606080336000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611611c2c57600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054611c8b90614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb790614421565b8015611d045780601f10611cd957610100808354040283529160200191611d04565b820191906000526020600020905b815481529060010190602001808311611ce757829003601f168201915b50505050509350828054611d1790614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4390614421565b8015611d905780601f10611d6557610100808354040283529160200191611d90565b820191906000526020600020905b815481529060010190602001808311611d7357829003601f168201915b50505050509250818054611da390614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611dcf90614421565b8015611e1c5780601f10611df157610100808354040283529160200191611e1c565b820191906000526020600020905b815481529060010190602001808311611dff57829003601f168201915b50505050509150808054611e2f90614421565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5b90614421565b8015611ea85780601f10611e7d57610100808354040283529160200191611ea8565b820191906000526020600020905b815481529060010190602001808311611e8b57829003601f168201915b50505050509050965096509650965050505090919293565b600060405180606001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019081611fa89190614685565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190816120059190614685565b50505050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508160ff161015612177578473ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260ff168154811061210f5761210e614452565b5b906000526020600020906003020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361216457809250612177565b808061216f906144b0565b915050612057565b506040518060400160405280600881526020017f72656a6563746564000000000000000000000000000000000000000000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff168154811061220257612201614452565b5b9060005260206000209060030201600201908161221f9190614685565b505050505050565b6060600060606000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020182805461229690614421565b80601f01602080910402602001604051908101604052809291908181526020018280546122c290614421565b801561230f5780601f106122e45761010080835404028352916020019161230f565b820191906000526020600020905b8154815290600101906020018083116122f257829003601f168201915b5050505050925080805461232290614421565b80601f016020809104026020016040519081016040528092919081815260200182805461234e90614421565b801561239b5780601f106123705761010080835404028352916020019161239b565b820191906000526020600020905b81548152906001019060200180831161237e57829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816125069190614685565b50604082015181600201908161251c9190614685565b5060608201518160030190816125329190614685565b5050508260405161254391906147ce565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd846040516125919190614877565b60405180910390a3505050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016125f090614788565b604051602081830303815290604052805190602001208560405160200161261791906147ce565b604051602081830303815290604052805190602001200361263757600080fd5b60405160200161264690614788565b604051602081830303815290604052805190602001208360405160200161266d91906147ce565b604051602081830303815290604052805190602001200361268d57600080fd5b60405160200161269c90614788565b60405160208183030381529060405280519060200120826040516020016126c391906147ce565b60405160208183030381529060405280519060200120036126e357600080fd5b60008460ff161180156126f9575060648460ff16105b61270257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561276057600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190816127f49190614685565b5060208201518160010160006101000a81548160ff021916908360ff160217905550604082015181600201908161282b9190614685565b5060608201518160030190816128419190614685565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508460405161289a91906147ce565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161299457600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054612a0190614421565b80601f0160208091040260200160405190810160405280929190818152602001828054612a2d90614421565b8015612a7a5780601f10612a4f57610100808354040283529160200191612a7a565b820191906000526020600020905b815481529060010190602001808311612a5d57829003601f168201915b50505050509350818054612a8d90614421565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab990614421565b8015612b065780601f10612adb57610100808354040283529160200191612b06565b820191906000526020600020905b815481529060010190602001808311612ae957829003601f168201915b50505050509150808054612b1990614421565b80601f0160208091040260200160405190810160405280929190818152602001828054612b4590614421565b8015612b925780601f10612b6757610100808354040283529160200191612b92565b820191906000526020600020905b815481529060010190602001808311612b7557829003601f168201915b50505050509050965096509650965050505090919293565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050604051602001612bfc90614788565b6040516020818303038152906040528051906020012085604051602001612c2391906147ce565b6040516020818303038152906040528051906020012003612c4357600080fd5b604051602001612c5290614788565b6040516020818303038152906040528051906020012084604051602001612c7991906147ce565b6040516020818303038152906040528051906020012003612c9957600080fd5b604051602001612ca890614788565b6040516020818303038152906040528051906020012083604051602001612ccf91906147ce565b6040516020818303038152906040528051906020012003612cef57600080fd5b604051602001612cfe90614788565b6040516020818303038152906040528051906020012082604051602001612d2591906147ce565b6040516020818303038152906040528051906020012003612d4557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115612da357600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081612e349190614685565b506020820151816001019081612e4a9190614685565b506040820151816002019081612e609190614685565b506060820151816003019081612e769190614685565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612f2d90614421565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5990614421565b8015612fa65780601f10612f7b57610100808354040283529160200191612fa6565b820191906000526020600020905b815481529060010190602001808311612f8957829003601f168201915b50505050509350828054612fb990614421565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe590614421565b80156130325780601f1061300757610100808354040283529160200191613032565b820191906000526020600020905b81548152906001019060200180831161301557829003601f168201915b5050505050925081805461304590614421565b80601f016020809104026020016040519081016040528092919081815260200182805461307190614421565b80156130be5780601f10613093576101008083540402835291602001916130be565b820191906000526020600020905b8154815290600101906020018083116130a157829003601f168201915b505050505091508080546130d190614421565b80601f01602080910402602001604051908101604052809291908181526020018280546130fd90614421565b801561314a5780601f1061311f5761010080835404028352916020019161314a565b820191906000526020600020905b81548152906001019060200180831161312d57829003601f168201915b505050505090509450945094509450509193509193565b6003602052816000526040600020818154811061317d57600080fd5b9060005260206000209060030201600091509150508060000180546131a190614421565b80601f01602080910402602001604051908101604052809291908181526020018280546131cd90614421565b801561321a5780601f106131ef5761010080835404028352916020019161321a565b820191906000526020600020905b8154815290600101906020018083116131fd57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461325590614421565b80601f016020809104026020016040519081016040528092919081815260200182805461328190614421565b80156132ce5780601f106132a3576101008083540402835291602001916132ce565b820191906000526020600020905b8154815290600101906020018083116132b157829003601f168201915b5050505050905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335d90614857565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106133da576133d9614452565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f7665640000000000000000000000000000000000000000000000008152508160030190816134309190614685565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff16826002018360030183805461354890614421565b80601f016020809104026020016040519081016040528092919081815260200182805461357490614421565b80156135c15780601f10613596576101008083540402835291602001916135c1565b820191906000526020600020905b8154815290600101906020018083116135a457829003601f168201915b505050505093508180546135d490614421565b80601f016020809104026020016040519081016040528092919081815260200182805461360090614421565b801561364d5780601f106136225761010080835404028352916020019161364d565b820191906000526020600020905b81548152906001019060200180831161363057829003601f168201915b5050505050915080805461366090614421565b80601f016020809104026020016040519081016040528092919081815260200182805461368c90614421565b80156136d95780601f106136ae576101008083540402835291602001916136d9565b820191906000526020600020905b8154815290600101906020018083116136bc57829003601f168201915b505050505090509450945094509450509193509193565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061372f82613704565b9050919050565b61373f81613724565b811461374a57600080fd5b50565b60008135905061375c81613736565b92915050565b600060208284031215613778576137776136fa565b5b60006137868482850161374d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137c95780820151818401526020810190506137ae565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f18261378f565b6137fb818561379a565b935061380b8185602086016137ab565b613814816137d5565b840191505092915050565b600060ff82169050919050565b6138358161381f565b82525050565b61384481613724565b82525050565b6000608082019050818103600083015261386481876137e6565b9050613873602083018661382c565b818103604083015261388581856137e6565b9050613894606083018461383b565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006138e58261378f565b6138ef81856138c9565b93506138ff8185602086016137ab565b613908816137d5565b840191505092915050565b61391c81613724565b82525050565b6000606083016000830151848203600086015261393f82826138da565b91505060208301516139546020860182613913565b506040830151848203604086015261396c82826138da565b9150508091505092915050565b60006139858383613922565b905092915050565b6000602082019050919050565b60006139a58261389d565b6139af81856138a8565b9350836020820285016139c1856138b9565b8060005b858110156139fd57848403895281516139de8582613979565b94506139e98361398d565b925060208a019950506001810190506139c5565b50829750879550505050505092915050565b60006020820190508181036000830152613a29818461399a565b905092915050565b60008060408385031215613a4857613a476136fa565b5b6000613a568582860161374d565b9250506020613a678582860161374d565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ab3826137d5565b810181811067ffffffffffffffff82111715613ad257613ad1613a7b565b5b80604052505050565b6000613ae56136f0565b9050613af18282613aaa565b919050565b600067ffffffffffffffff821115613b1157613b10613a7b565b5b613b1a826137d5565b9050602081019050919050565b82818337600083830152505050565b6000613b49613b4484613af6565b613adb565b905082815260208101848484011115613b6557613b64613a76565b5b613b70848285613b27565b509392505050565b600082601f830112613b8d57613b8c613a71565b5b8135613b9d848260208601613b36565b91505092915050565b613baf8161381f565b8114613bba57600080fd5b50565b600081359050613bcc81613ba6565b92915050565b600080600060608486031215613beb57613bea6136fa565b5b600084013567ffffffffffffffff811115613c0957613c086136ff565b5b613c1586828701613b78565b9350506020613c2686828701613bbd565b925050604084013567ffffffffffffffff811115613c4757613c466136ff565b5b613c5386828701613b78565b9150509250925092565b6000819050919050565b613c7081613c5d565b8114613c7b57600080fd5b50565b600081359050613c8d81613c67565b92915050565b600060208284031215613ca957613ca86136fa565b5b6000613cb784828501613c7e565b91505092915050565b60006060820190508181036000830152613cda81866137e6565b9050613ce9602083018561382c565b8181036040830152613cfb81846137e6565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d3a8161381f565b82525050565b600060a0830160008301518482036000860152613d5d82826138da565b9150506020830151613d726020860182613d31565b5060408301518482036040860152613d8a82826138da565b91505060608301518482036060860152613da482826138da565b9150506080830151613db96080860182613913565b508091505092915050565b6000613dd08383613d40565b905092915050565b6000602082019050919050565b6000613df082613d05565b613dfa8185613d10565b935083602082028501613e0c85613d21565b8060005b85811015613e485784840389528151613e298582613dc4565b9450613e3483613dd8565b925060208a01995050600181019050613e10565b50829750879550505050505092915050565b60006020820190508181036000830152613e748184613de5565b905092915050565b60008060408385031215613e9357613e926136fa565b5b6000613ea18582860161374d565b9250506020613eb285828601613c7e565b9150509250929050565b600060a0820190508181036000830152613ed681886137e6565b9050613ee5602083018761382c565b8181036040830152613ef781866137e6565b90508181036060830152613f0b81856137e6565b9050613f1a608083018461383b565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000608083016000830151613f686000860182613913565b5060208301518482036020860152613f8082826138da565b91505060408301518482036040860152613f9a82826138da565b91505060608301518482036060860152613fb482826138da565b9150508091505092915050565b6000613fcd8383613f50565b905092915050565b6000602082019050919050565b6000613fed82613f24565b613ff78185613f2f565b93508360208202850161400985613f40565b8060005b8581101561404557848403895281516140268582613fc1565b945061403183613fd5565b925060208a0199505060018101905061400d565b50829750879550505050505092915050565b600060208201905081810360008301526140718184613fe2565b905092915050565b6000608082019050818103600083015261409381876137e6565b905081810360208301526140a781866137e6565b905081810360408301526140bb81856137e6565b905081810360608301526140cf81846137e6565b905095945050505050565b6000806000606084860312156140f3576140f26136fa565b5b60006141018682870161374d565b93505060206141128682870161374d565b925050604084013567ffffffffffffffff811115614133576141326136ff565b5b61413f86828701613b78565b9150509250925092565b600080604083850312156141605761415f6136fa565b5b600083013567ffffffffffffffff81111561417e5761417d6136ff565b5b61418a85828601613b78565b925050602083013567ffffffffffffffff8111156141ab576141aa6136ff565b5b6141b785828601613b78565b9150509250929050565b600080600080608085870312156141db576141da6136fa565b5b600085013567ffffffffffffffff8111156141f9576141f86136ff565b5b61420587828801613b78565b945050602061421687828801613bbd565b935050604085013567ffffffffffffffff811115614237576142366136ff565b5b61424387828801613b78565b925050606085013567ffffffffffffffff811115614264576142636136ff565b5b61427087828801613b78565b91505092959194509250565b6000608082019050818103600083015261429681876137e6565b90506142a5602083018661382c565b81810360408301526142b781856137e6565b905081810360608301526142cb81846137e6565b905095945050505050565b600080600080608085870312156142f0576142ef6136fa565b5b600085013567ffffffffffffffff81111561430e5761430d6136ff565b5b61431a87828801613b78565b945050602085013567ffffffffffffffff81111561433b5761433a6136ff565b5b61434787828801613b78565b935050604085013567ffffffffffffffff811115614368576143676136ff565b5b61437487828801613b78565b925050606085013567ffffffffffffffff811115614395576143946136ff565b5b6143a187828801613b78565b91505092959194509250565b600060608201905081810360008301526143c781866137e6565b90506143d6602083018561383b565b81810360408301526143e881846137e6565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061443957607f821691505b60208210810361444c5761444b6143f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144bb8261381f565b915060ff82036144ce576144cd614481565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261453b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826144fe565b61454586836144fe565b95508019841693508086168417925050509392505050565b6000819050919050565b600061458261457d61457884613c5d565b61455d565b613c5d565b9050919050565b6000819050919050565b61459c83614567565b6145b06145a882614589565b84845461450b565b825550505050565b600090565b6145c56145b8565b6145d0818484614593565b505050565b5b818110156145f4576145e96000826145bd565b6001810190506145d6565b5050565b601f8211156146395761460a816144d9565b614613846144ee565b81016020851015614622578190505b61463661462e856144ee565b8301826145d5565b50505b505050565b600082821c905092915050565b600061465c6000198460080261463e565b1980831691505092915050565b6000614675838361464b565b9150826002028217905092915050565b61468e8261378f565b67ffffffffffffffff8111156146a7576146a6613a7b565b5b6146b18254614421565b6146bc8282856145f8565b600060209050601f8311600181146146ef57600084156146dd578287015190505b6146e78582614669565b86555061474f565b601f1984166146fd866144d9565b60005b8281101561472557848901518255600182019150602085019450602081019050614700565b86831015614742578489015161473e601f89168261464b565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b50565b6000614772600083614757565b915061477d82614762565b600082019050919050565b600061479382614765565b9150819050919050565b60006147a88261378f565b6147b28185614757565b93506147c28185602086016137ab565b80840191505092915050565b60006147da828461479d565b915081905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061484160218361379a565b915061484c826147e5565b604082019050919050565b6000602082019050818103600083015261487081614834565b9050919050565b6000602082019050818103600083015261489181846137e6565b90509291505056fea2646970667358221220dc79161da0496aea80b77cb3dd0508096bc78ead9ee02b4d03b8379c3e9bb5ab64736f6c63430008110033";
+ "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614640806100606000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063939686dc116100b8578063bc4fe4021161007c578063bc4fe4021461035d578063c5b0aab014610379578063cc063706146103ac578063d1d8b266146103de578063d7d1bbdb146103fa578063e1e36ab91461041657610137565b8063939686dc146102b6578063a9b467ee146102d2578063afc3b5c414610304578063b2d258ff14610320578063b380f5c61461033c57610137565b80635df122e1116100ff5780635df122e1146101f75780636d36f7be146102275780637521eca11461025b5780638813ce1214610277578063916922c41461029557610137565b80630869cfbc1461013c57806310b500cc1461016f5780631c2972051461019f5780632d7788db146101bb578063326df664146101d7575b600080fd5b61015660048036038101906101519190613518565b610449565b6040516101669493929190613600565b60405180910390f35b61018960048036038101906101849190613518565b6105b6565b60405161019691906137c5565b60405180910390f35b6101b960048036038101906101b49190613948565b6107ce565b005b6101d560048036038101906101d09190613a09565b610a07565b005b6101df610c03565b6040516101ee93929190613a36565b60405180910390f35b610211600480360381019061020c9190613518565b610e2d565b60405161021e9190613bd0565b60405180910390f35b610241600480360381019061023c9190613bf2565b6110f4565b604051610252959493929190613c32565b60405180910390f35b61027560048036038101906102709190613c9a565b61130c565b005b61027f611709565b60405161028c9190613e20565b60405180910390f35b61029d611a60565b6040516102ad9493929190613e42565b60405180910390f35b6102d060048036038101906102cb9190613ea3565b611d9b565b005b6102ec60048036038101906102e79190613518565b611ee9565b6040516102fb93929190613a36565b60405180910390f35b61031e60048036038101906103199190613f12565b612072565b005b61033a60048036038101906103359190613f8a565b612260565b005b6103446125ae565b6040516103549493929190614045565b60405180910390f35b6103776004803603810190610372919061409f565b61286c565b005b610393600480360381019061038e9190613518565b612b8a565b6040516103a39493929190613e42565b60405180910390f35b6103c660048036038101906103c19190613bf2565b612e23565b6040516103d593929190614176565b60405180910390f35b6103f860048036038101906103f39190613c9a565b612f9a565b005b610414600480360381019061040f9190613a09565b61308e565b005b610430600480360381019061042b9190613518565b61328a565b6040516104409493929190614045565b60405180910390f35b600460205280600052604060002060009150905080600001805461046c906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610498906141ea565b80156104e55780601f106104ba576101008083540402835291602001916104e5565b820191906000526020600020905b8154815290600101906020018083116104c857829003601f168201915b5050505050908060010160009054906101000a900460ff169080600201805461050d906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610539906141ea565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156107c3578382906000526020600020906003020160405180606001604052908160008201805461064a906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610676906141ea565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610732906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461075e906141ea565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b50505050508152505081526020019060010190610617565b505050509050919050565b6040516020016107dd9061424c565b60405160208183030381529060405280519060200120836040516020016108049190614292565b604051602081830303815290604052805190602001200361082457600080fd5b6040516020016108339061424c565b604051602081830303815290604052805190602001208160405160200161085a9190614292565b604051602081830303815290604052805190602001200361087a57600080fd5b60008260ff16118015610890575060648260ff16105b61089957600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190816109279190614455565b5060208201518160010160006101000a81548160ff021916908360ff160217905550604082015181600201908161095e9190614455565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050826040516109b79190614292565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90614599565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b0957610b086145b9565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a6563746564000000000000000000000000000000000000000000000000815250816003019081610b5f9190614455565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611610caa57600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054610d13906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3f906141ea565b8015610d8c5780601f10610d6157610100808354040283529160200191610d8c565b820191906000526020600020905b815481529060010190602001808311610d6f57829003601f168201915b50505050509250808054610d9f906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcb906141ea565b8015610e185780601f10610ded57610100808354040283529160200191610e18565b820191906000526020600020905b815481529060010190602001808311610dfb57829003601f168201915b50505050509050955095509550505050909192565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156110e957838290600052602060002090600502016040518060a0016040529081600082018054610ec1906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610eed906141ea565b8015610f3a5780601f10610f0f57610100808354040283529160200191610f3a565b820191906000526020600020905b815481529060010190602001808311610f1d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff168152602001600282018054610f70906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c906141ea565b8015610fe95780601f10610fbe57610100808354040283529160200191610fe9565b820191906000526020600020905b815481529060010190602001808311610fcc57829003601f168201915b50505050508152602001600382018054611002906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461102e906141ea565b801561107b5780601f106110505761010080835404028352916020019161107b565b820191906000526020600020905b81548152906001019060200180831161105e57829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610e8e565b505050509050919050565b6002602052816000526040600020818154811061111057600080fd5b906000526020600020906005020160009150915050806000018054611134906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611160906141ea565b80156111ad5780601f10611182576101008083540402835291602001916111ad565b820191906000526020600020905b81548152906001019060200180831161119057829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020180546111d5906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611201906141ea565b801561124e5780601f106112235761010080835404028352916020019161124e565b820191906000526020600020905b81548152906001019060200180831161123157829003601f168201915b505050505090806003018054611263906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461128f906141ea565b80156112dc5780601f106112b1576101008083540402835291602001916112dc565b820191906000526020600020905b8154815290600101906020018083116112bf57829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106113a2576113a16145b9565b5b906000526020600020906003020190506040518060400160405280600981526020017f636f6e6669726d656400000000000000000000000000000000000000000000008152508160020190816113f89190614455565b50600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405280846000018054611452906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461147e906141ea565b80156114cb5780601f106114a0576101008083540402835291602001916114cb565b820191906000526020600020905b8154815290600101906020018083116114ae57829003601f168201915b505050505081526020018460010160009054906101000a900460ff1660ff1681526020018460020180546114fe906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461152a906141ea565b80156115775780601f1061154c57610100808354040283529160200191611577565b820191906000526020600020905b81548152906001019060200180831161155a57829003601f168201915b50505050508152602001846003018054611590906141ea565b80601f01602080910402602001604051908101604052809291908181526020018280546115bc906141ea565b80156116095780601f106115de57610100808354040283529160200191611609565b820191906000526020600020905b8154815290600101906020018083116115ec57829003601f168201915b505050505081526020018673ffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001908161166b9190614455565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816116a29190614455565b5060608201518160030190816116b89190614455565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090614599565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611a5757838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180546118a2906141ea565b80601f01602080910402602001604051908101604052809291908181526020018280546118ce906141ea565b801561191b5780601f106118f05761010080835404028352916020019161191b565b820191906000526020600020905b8154815290600101906020018083116118fe57829003601f168201915b50505050508152602001600282018054611934906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611960906141ea565b80156119ad5780601f10611982576101008083540402835291602001916119ad565b820191906000526020600020905b81548152906001019060200180831161199057829003601f168201915b505050505081526020016003820180546119c6906141ea565b80601f01602080910402602001604051908101604052809291908181526020018280546119f2906141ea565b8015611a3f5780601f10611a1457610100808354040283529160200191611a3f565b820191906000526020600020905b815481529060010190602001808311611a2257829003601f168201915b50505050508152505081526020019060010190611819565b50505050905090565b606080606080336000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611611b0757600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054611b66906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b92906141ea565b8015611bdf5780601f10611bb457610100808354040283529160200191611bdf565b820191906000526020600020905b815481529060010190602001808311611bc257829003601f168201915b50505050509350828054611bf2906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e906141ea565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b50505050509250818054611c7e906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611caa906141ea565b8015611cf75780601f10611ccc57610100808354040283529160200191611cf7565b820191906000526020600020905b815481529060010190602001808311611cda57829003601f168201915b50505050509150808054611d0a906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611d36906141ea565b8015611d835780601f10611d5857610100808354040283529160200191611d83565b820191906000526020600020905b815481529060010190602001808311611d6657829003601f168201915b50505050509050965096509650965050505090919293565b600060405180606001604052808381526020018473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019081611e839190614455565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019081611ee09190614455565b50505050505050565b6060600060606000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054611f58906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611f84906141ea565b8015611fd15780601f10611fa657610100808354040283529160200191611fd1565b820191906000526020600020905b815481529060010190602001808311611fb457829003601f168201915b50505050509250808054611fe4906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612010906141ea565b801561205d5780601f106120325761010080835404028352916020019161205d565b820191906000526020600020905b81548152906001019060200180831161204057829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816121c89190614455565b5060408201518160020190816121de9190614455565b5060608201518160030190816121f49190614455565b505050826040516122059190614292565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd8460405161225391906145e8565b60405180910390a3505050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016122b29061424c565b60405160208183030381529060405280519060200120856040516020016122d99190614292565b60405160208183030381529060405280519060200120036122f957600080fd5b6040516020016123089061424c565b604051602081830303815290604052805190602001208360405160200161232f9190614292565b604051602081830303815290604052805190602001200361234f57600080fd5b60405160200161235e9061424c565b60405160208183030381529060405280519060200120826040516020016123859190614292565b60405160208183030381529060405280519060200120036123a557600080fd5b60008460ff161180156123bb575060648460ff16105b6123c457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561242257600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190816124b69190614455565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816124ed9190614455565b5060608201518160030190816125039190614455565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508460405161255c9190614292565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161265657600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201836003018380546126c3906141ea565b80601f01602080910402602001604051908101604052809291908181526020018280546126ef906141ea565b801561273c5780601f106127115761010080835404028352916020019161273c565b820191906000526020600020905b81548152906001019060200180831161271f57829003601f168201915b5050505050935081805461274f906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461277b906141ea565b80156127c85780601f1061279d576101008083540402835291602001916127c8565b820191906000526020600020905b8154815290600101906020018083116127ab57829003601f168201915b505050505091508080546127db906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612807906141ea565b80156128545780601f1061282957610100808354040283529160200191612854565b820191906000526020600020905b81548152906001019060200180831161283757829003601f168201915b50505050509050965096509650965050505090919293565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016128be9061424c565b60405160208183030381529060405280519060200120856040516020016128e59190614292565b604051602081830303815290604052805190602001200361290557600080fd5b6040516020016129149061424c565b604051602081830303815290604052805190602001208460405160200161293b9190614292565b604051602081830303815290604052805190602001200361295b57600080fd5b60405160200161296a9061424c565b60405160208183030381529060405280519060200120836040516020016129919190614292565b60405160208183030381529060405280519060200120036129b157600080fd5b6040516020016129c09061424c565b60405160208183030381529060405280519060200120826040516020016129e79190614292565b6040516020818303038152906040528051906020012003612a0757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115612a6557600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081612af69190614455565b506020820151816001019081612b0c9190614455565b506040820151816002019081612b229190614455565b506060820151816003019081612b389190614455565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612bef906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1b906141ea565b8015612c685780601f10612c3d57610100808354040283529160200191612c68565b820191906000526020600020905b815481529060010190602001808311612c4b57829003601f168201915b50505050509350828054612c7b906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca7906141ea565b8015612cf45780601f10612cc957610100808354040283529160200191612cf4565b820191906000526020600020905b815481529060010190602001808311612cd757829003601f168201915b50505050509250818054612d07906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612d33906141ea565b8015612d805780601f10612d5557610100808354040283529160200191612d80565b820191906000526020600020905b815481529060010190602001808311612d6357829003601f168201915b50505050509150808054612d93906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612dbf906141ea565b8015612e0c5780601f10612de157610100808354040283529160200191612e0c565b820191906000526020600020905b815481529060010190602001808311612def57829003601f168201915b505050505090509450945094509450509193509193565b60036020528160005260406000208181548110612e3f57600080fd5b906000526020600020906003020160009150915050806000018054612e63906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8f906141ea565b8015612edc5780601f10612eb157610100808354040283529160200191612edc565b820191906000526020600020905b815481529060010190602001808311612ebf57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002018054612f17906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054612f43906141ea565b8015612f905780601f10612f6557610100808354040283529160200191612f90565b820191906000526020600020905b815481529060010190602001808311612f7357829003601f168201915b5050505050905083565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106130305761302f6145b9565b5b906000526020600020906003020190506040518060400160405280600881526020017f72656a65637465640000000000000000000000000000000000000000000000008152508160020190816130869190614455565b505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461311c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311390614599565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106131905761318f6145b9565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f7665640000000000000000000000000000000000000000000000008152508160030190816131e69190614455565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201836003018380546132fe906141ea565b80601f016020809104026020016040519081016040528092919081815260200182805461332a906141ea565b80156133775780601f1061334c57610100808354040283529160200191613377565b820191906000526020600020905b81548152906001019060200180831161335a57829003601f168201915b5050505050935081805461338a906141ea565b80601f01602080910402602001604051908101604052809291908181526020018280546133b6906141ea565b80156134035780601f106133d857610100808354040283529160200191613403565b820191906000526020600020905b8154815290600101906020018083116133e657829003601f168201915b50505050509150808054613416906141ea565b80601f0160208091040260200160405190810160405280929190818152602001828054613442906141ea565b801561348f5780601f106134645761010080835404028352916020019161348f565b820191906000526020600020905b81548152906001019060200180831161347257829003601f168201915b505050505090509450945094509450509193509193565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134e5826134ba565b9050919050565b6134f5816134da565b811461350057600080fd5b50565b600081359050613512816134ec565b92915050565b60006020828403121561352e5761352d6134b0565b5b600061353c84828501613503565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561357f578082015181840152602081019050613564565b60008484015250505050565b6000601f19601f8301169050919050565b60006135a782613545565b6135b18185613550565b93506135c1818560208601613561565b6135ca8161358b565b840191505092915050565b600060ff82169050919050565b6135eb816135d5565b82525050565b6135fa816134da565b82525050565b6000608082019050818103600083015261361a818761359c565b905061362960208301866135e2565b818103604083015261363b818561359c565b905061364a60608301846135f1565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061369b82613545565b6136a5818561367f565b93506136b5818560208601613561565b6136be8161358b565b840191505092915050565b6136d2816134da565b82525050565b600060608301600083015184820360008601526136f58282613690565b915050602083015161370a60208601826136c9565b50604083015184820360408601526137228282613690565b9150508091505092915050565b600061373b83836136d8565b905092915050565b6000602082019050919050565b600061375b82613653565b613765818561365e565b9350836020820285016137778561366f565b8060005b858110156137b35784840389528151613794858261372f565b945061379f83613743565b925060208a0199505060018101905061377b565b50829750879550505050505092915050565b600060208201905081810360008301526137df8184613750565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138298261358b565b810181811067ffffffffffffffff82111715613848576138476137f1565b5b80604052505050565b600061385b6134a6565b90506138678282613820565b919050565b600067ffffffffffffffff821115613887576138866137f1565b5b6138908261358b565b9050602081019050919050565b82818337600083830152505050565b60006138bf6138ba8461386c565b613851565b9050828152602081018484840111156138db576138da6137ec565b5b6138e684828561389d565b509392505050565b600082601f830112613903576139026137e7565b5b81356139138482602086016138ac565b91505092915050565b613925816135d5565b811461393057600080fd5b50565b6000813590506139428161391c565b92915050565b600080600060608486031215613961576139606134b0565b5b600084013567ffffffffffffffff81111561397f5761397e6134b5565b5b61398b868287016138ee565b935050602061399c86828701613933565b925050604084013567ffffffffffffffff8111156139bd576139bc6134b5565b5b6139c9868287016138ee565b9150509250925092565b6000819050919050565b6139e6816139d3565b81146139f157600080fd5b50565b600081359050613a03816139dd565b92915050565b600060208284031215613a1f57613a1e6134b0565b5b6000613a2d848285016139f4565b91505092915050565b60006060820190508181036000830152613a50818661359c565b9050613a5f60208301856135e2565b8181036040830152613a71818461359c565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ab0816135d5565b82525050565b600060a0830160008301518482036000860152613ad38282613690565b9150506020830151613ae86020860182613aa7565b5060408301518482036040860152613b008282613690565b91505060608301518482036060860152613b1a8282613690565b9150506080830151613b2f60808601826136c9565b508091505092915050565b6000613b468383613ab6565b905092915050565b6000602082019050919050565b6000613b6682613a7b565b613b708185613a86565b935083602082028501613b8285613a97565b8060005b85811015613bbe5784840389528151613b9f8582613b3a565b9450613baa83613b4e565b925060208a01995050600181019050613b86565b50829750879550505050505092915050565b60006020820190508181036000830152613bea8184613b5b565b905092915050565b60008060408385031215613c0957613c086134b0565b5b6000613c1785828601613503565b9250506020613c28858286016139f4565b9150509250929050565b600060a0820190508181036000830152613c4c818861359c565b9050613c5b60208301876135e2565b8181036040830152613c6d818661359c565b90508181036060830152613c81818561359c565b9050613c9060808301846135f1565b9695505050505050565b600080600060608486031215613cb357613cb26134b0565b5b6000613cc186828701613503565b9350506020613cd286828701613503565b9250506040613ce3868287016139f4565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000608083016000830151613d3160008601826136c9565b5060208301518482036020860152613d498282613690565b91505060408301518482036040860152613d638282613690565b91505060608301518482036060860152613d7d8282613690565b9150508091505092915050565b6000613d968383613d19565b905092915050565b6000602082019050919050565b6000613db682613ced565b613dc08185613cf8565b935083602082028501613dd285613d09565b8060005b85811015613e0e5784840389528151613def8582613d8a565b9450613dfa83613d9e565b925060208a01995050600181019050613dd6565b50829750879550505050505092915050565b60006020820190508181036000830152613e3a8184613dab565b905092915050565b60006080820190508181036000830152613e5c818761359c565b90508181036020830152613e70818661359c565b90508181036040830152613e84818561359c565b90508181036060830152613e98818461359c565b905095945050505050565b600080600060608486031215613ebc57613ebb6134b0565b5b6000613eca86828701613503565b9350506020613edb86828701613503565b925050604084013567ffffffffffffffff811115613efc57613efb6134b5565b5b613f08868287016138ee565b9150509250925092565b60008060408385031215613f2957613f286134b0565b5b600083013567ffffffffffffffff811115613f4757613f466134b5565b5b613f53858286016138ee565b925050602083013567ffffffffffffffff811115613f7457613f736134b5565b5b613f80858286016138ee565b9150509250929050565b60008060008060808587031215613fa457613fa36134b0565b5b600085013567ffffffffffffffff811115613fc257613fc16134b5565b5b613fce878288016138ee565b9450506020613fdf87828801613933565b935050604085013567ffffffffffffffff81111561400057613fff6134b5565b5b61400c878288016138ee565b925050606085013567ffffffffffffffff81111561402d5761402c6134b5565b5b614039878288016138ee565b91505092959194509250565b6000608082019050818103600083015261405f818761359c565b905061406e60208301866135e2565b8181036040830152614080818561359c565b90508181036060830152614094818461359c565b905095945050505050565b600080600080608085870312156140b9576140b86134b0565b5b600085013567ffffffffffffffff8111156140d7576140d66134b5565b5b6140e3878288016138ee565b945050602085013567ffffffffffffffff811115614104576141036134b5565b5b614110878288016138ee565b935050604085013567ffffffffffffffff811115614131576141306134b5565b5b61413d878288016138ee565b925050606085013567ffffffffffffffff81111561415e5761415d6134b5565b5b61416a878288016138ee565b91505092959194509250565b60006060820190508181036000830152614190818661359c565b905061419f60208301856135f1565b81810360408301526141b1818461359c565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061420257607f821691505b602082108103614215576142146141bb565b5b50919050565b600081905092915050565b50565b600061423660008361421b565b915061424182614226565b600082019050919050565b600061425782614229565b9150819050919050565b600061426c82613545565b614276818561421b565b9350614286818560208601613561565b80840191505092915050565b600061429e8284614261565b915081905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261430b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826142ce565b61431586836142ce565b95508019841693508086168417925050509392505050565b6000819050919050565b600061435261434d614348846139d3565b61432d565b6139d3565b9050919050565b6000819050919050565b61436c83614337565b61438061437882614359565b8484546142db565b825550505050565b600090565b614395614388565b6143a0818484614363565b505050565b5b818110156143c4576143b960008261438d565b6001810190506143a6565b5050565b601f821115614409576143da816142a9565b6143e3846142be565b810160208510156143f2578190505b6144066143fe856142be565b8301826143a5565b50505b505050565b600082821c905092915050565b600061442c6000198460080261440e565b1980831691505092915050565b6000614445838361441b565b9150826002028217905092915050565b61445e82613545565b67ffffffffffffffff811115614477576144766137f1565b5b61448182546141ea565b61448c8282856143c8565b600060209050601f8311600181146144bf57600084156144ad578287015190505b6144b78582614439565b86555061451f565b601f1984166144cd866142a9565b60005b828110156144f5578489015182556001820191506020850194506020810190506144d0565b86831015614512578489015161450e601f89168261441b565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614583602183613550565b915061458e82614527565b604082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190508181036000830152614602818461359c565b90509291505056fea2646970667358221220c1b2ae848c7babf4c77ed1faeecb417b032136e191fa5cca6754b17c1620030064736f6c63430008110033";
type HealthBlockConstructorParams =
| [signer?: Signer]
diff --git a/client/src/providers/HealthProvider.tsx b/client/src/providers/HealthProvider.tsx
index eb37685..c273df7 100644
--- a/client/src/providers/HealthProvider.tsx
+++ b/client/src/providers/HealthProvider.tsx
@@ -35,7 +35,12 @@ interface HealthAppContextInterface {
connectWallet?: () => Promise;
healthBlockContract?: () => Promise;
registerHealthBlockContract?: (name: string, age: number, email: string) => Promise;
- updateProfile?: (hcAddress: string, docAddress: string, status: string) => Promise;
+ updateProfile?: (
+ hcAddress: string,
+ docAddress: string,
+ status: string,
+ idx: number,
+ ) => Promise;
registerDoctorHealthBlockContract?: (
name: string,
age: number,
@@ -290,10 +295,16 @@ export const HealthProvider: React.FC = ({ children, ...props }) => {
setDoctorList(docArr);
} catch (error) {
- setError('Error Loading Health Contract');
+ throw error;
+ // setError('Error Loading Health Contract');
}
};
- const updateProfile = async (hcAddress: string, docAddress: string, status: string) => {
+ const updateProfile = async (
+ hcAddress: string,
+ docAddress: string,
+ status: string,
+ idx: number,
+ ) => {
try {
const web3modal = new Web3Modal();
const connection = await web3modal.connect();
@@ -302,14 +313,15 @@ export const HealthProvider: React.FC = ({ children, ...props }) => {
const contract: HealthBlock = fetchContract(signer);
let update;
if (status == 'confirmed') {
- update = await contract.mapDoctorToProvider(hcAddress, docAddress);
+ update = await contract.mapDoctorToProvider(hcAddress, docAddress, idx);
} else {
- update = await contract.declineDoctorToProviderRequest(hcAddress, docAddress);
+ update = await contract.declineDoctorToProviderRequest(hcAddress, docAddress, idx);
}
update.wait();
} catch (err: any) {
- setError(`Error Loading Health Contract ${err}`);
+ throw err;
+ //setError(`Error Loading Health Contract ${err}`);
}
};
@@ -323,6 +335,7 @@ export const HealthProvider: React.FC = ({ children, ...props }) => {
const doctors = await contract.getAllDoctorToProviderRequests(
'0xb3cc507e752dcc3da1cef955b58e97ae77160103',
);
+
let docArr = [];
for (let i = 0; i < doctors.length; i++) {
let obj = {
@@ -335,7 +348,8 @@ export const HealthProvider: React.FC = ({ children, ...props }) => {
setDocToProviderList(docArr);
} catch (err: any) {
- setError(`Error Loading Health Contract ${err}`);
+ throw err;
+ //setError(`Error Loading Health Contract ${err}`);
}
};
@@ -352,7 +366,8 @@ export const HealthProvider: React.FC = ({ children, ...props }) => {
const contract: HealthBlock = fetchContract(signer);
const update = await contract.raiseDoctorToProviderRequest(hcAddress, docAddress, doctorName);
} catch (err: any) {
- setError(`Error Loading Health Contract ${err}`);
+ //setError(`Error Loading Health Contract ${err}`);
+ throw err;
}
};
diff --git a/contracts/HealthBlock.sol b/contracts/HealthBlock.sol
index 23eef74..1673333 100644
--- a/contracts/HealthBlock.sol
+++ b/contracts/HealthBlock.sol
@@ -176,39 +176,20 @@ contract HealthBlock {
function getAllDoctorsForProvider(address providerAddress) public view returns (doctor[] memory) {
return providerToDoctors[providerAddress];
}
- function mapDoctorToProvider(address _providerAddress, address _doctorAddress) public{
+ function mapDoctorToProvider(address _providerAddress, address _doctorAddress, uint256 idx) public{
doctor storage d = doctors[_doctorAddress];
- uint8 idx =0;
- bool found = false;
- for(uint8 i =0;i< providerToDoctorRequests[_providerAddress].length;i++){
- if(providerToDoctorRequests[_providerAddress][i].doctorAddr == _doctorAddress){
- idx = i;
- break;
- found = true;
- }
- }
-
- providerToDoctorRequests[_providerAddress][idx].status = 'confirmed';
- providerToDoctors[_providerAddress].push(doctor({name:d.name,email:d.email,specialization:d.specialization,id:_doctorAddress,age:d.age}));
+ DoctorToProviderRequest storage request = providerToDoctorRequests[_providerAddress][idx];
+ request.status="confirmed";
+ providerToDoctors[_providerAddress].push(doctor({name:d.name,email:d.email,specialization:d.specialization,id:_doctorAddress,age:d.age}));
}
- function declineDoctorToProviderRequest(address _providerAddress, address _doctorAddress) public{
+ function declineDoctorToProviderRequest(address _providerAddress, address _doctorAddress,uint256 idx) public{
doctor storage d = doctors[_doctorAddress];
- uint8 idx =0;
- bool found = false;
- for(uint8 i =0;i< providerToDoctorRequests[_providerAddress].length;i++){
- if(providerToDoctorRequests[_providerAddress][i].doctorAddr == _doctorAddress){
- idx = i;
- break;
- found = true;
- }
- }
+ DoctorToProviderRequest storage request = providerToDoctorRequests[_providerAddress][idx];
+ request.status ="rejected";
- providerToDoctorRequests[_providerAddress][idx].status = 'rejected';
-
-
- }
+ }