// Copyright (c) 1993-1999 Microsoft Corporation .file "stubless.s" #include "ksia64.h" .global ObjectStublessClient .type ObjectStublessClient, @function //++ // // Function: REGISTER_TYPE __stdcall Invoke(MANAGER_FUNCTION pFunction, // REGISTER_TYPE *pArgumentList, // ULONG FloatMask, // ULONG cArguments); // // Synopsis: Given a function pointer and an argument list, Invoke builds // a stack frame and calls the function. // // Arguments: pFunction - Pointer to the function to be called. // // pArgumentList - Pointer to the buffer containing the // function parameters. // // FloatMask - A mask that indicates argument slots passed as float/double registers // Each nibble indicates if the argument slot contains a float // Float : D8 F8 D7 F7 D6 F6 D5 F5 D4 F4 D3 F3 D2 F2 D1 F1 // bit position: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 // 16 bits represents 8 slots // If both the D and F bits are set then the argument slot contains // *two* floating point args. // // cArguments - The size of the argument list in REGISTER_TYPEs. // // // Notes: In the __stdcall calling convention, the callee must pop // the parameters. // //-- NESTED_ENTRY(Invoke) NESTED_SETUP(4,4,8,0) NumParam = a3 FloatMask = a2 ParamStartAddr = a1 CallFuncAddr = a0 savedSP = loc2 savedLC = loc3 paramSz = t10 funcAddr = t11 paramAddr = t12 startP = t13 endP = t14 ARGPTR (a0) ARGPTR (a1) .vframe savedSP mov savedSP = sp // save sp mov savedLC = ar.lc // preserve loop count shl paramSz = NumParam, 3 // num * szof(register) ;; PROLOGUE_END mov paramAddr = ParamStartAddr // param address add startP = ParamStartAddr,paramSz // to copy bottom to top ;; // // Check if the parameter list is > 64 bytes. If so then jump to the default // label. This will copy parameters > 64 bytes to the stack. // // If the paramter list is < 64 bytes then calculate the number of registers required // and dispatch to the correct load label. // add startP = -8, startP // compute start address // = pAddr + pSz - 8 cmp4.ge pt0, pt1 = 64, paramSz // if paramSz > 64 bytes (pt1) br.cond.spnt default // yes movl t0 = label0 // no. mem copy not needed shl t1 = NumParam, 4;; sub t0 = t0, t1;; // get correct bundle addr mov bt0 = t0 // to jump to br.cond.sptk bt0 default: // copy in-memory args tbit.nz pt2, pt3 = NumParam, 0 // is NumParam even? add endP = 64, paramAddr // last address add t0 = -64, paramSz ;; (pt2) add t0 = -8, t0 (pt3) add t0 = -16, t0 (pt2) mov t2 = savedSP (pt3) add t2 = 8, savedSP ;; sub sp = sp, t0 // allocate stack frame // // Load arguments > 64 bytes on to the stack // NextParam: ld8 t3 = [startP], -8 ;; st8 [t2] = t3, -8 cmp.lt pt0, pt1 = startP, endP // while current >= end (pt1) br.cond.sptk NextParam ;; // // Load the appropriate number of registers // label8: ld8 out7 = [startP], -8 nop.i 0 nop.i 0;; label7: ld8 out6 = [startP], -8 nop.i 0 nop.i 0;; label6: ld8 out5 = [startP], -8 nop.i 0 nop.i 0;; label5: ld8 out4 = [startP], -8 nop.i 0 nop.i 0;; label4: ld8 out3 = [startP], -8 nop.i 0 nop.i 0;; label3: ld8 out2 = [startP], -8 nop.i 0 nop.i 0;; label2: ld8 out1 = [startP], -8 nop.i 0 nop.i 0;; label1: ld8 out0 = [startP] nop.i 0 nop.i 0;; label0: // // If there are any floating point registers load them here // cmp.eq pt1 = 0,FloatMask // Check for Zero FP Arguments (pt1) br.cond.sptk NoFloat // If eql zero we are All done // // Loop through the floating mask looking for slots containing fp values // Algorithm: // The position of float arguments is unknown so iterate sequentially // through the FloatMask. Each time a float is found rotate the registers // using a counted loop. // // lc - Loop count. Initialize to the maximum number of arguments // t15 - Contains the floatmask. Shifted each iteration of the loop // t14 - bits<1:0> contain the current float descriptor // t12 - Contains the current parameter (i.e., slot) address // f32 - Rotated float register // pt1 - True if FloatMask equals zero // pt2 - True if current descriptor equals zero // pr16 - True if current descriptor contains a float. Rotate (pr17,pr18,etc) each iteration of the loop // pt3 - True if current descriptor contains float value // pt4 - True if current descriptor contanis double value // // mov t15 = FloatMask;; // Make a copy popcnt t4 = t15;; // Count the number of floating point regs needed mov t12 = paramAddr mov ar.lc = t4;; // The maximum loop count GetNextFloatDescriptor: extr.u t14 = t15, 0, 2 // Extract the current descriptor (D or F) shr t15 = t15,2;; // Shift to get next descriptor cmp.eq pt1 = 0,t15 // See if the mask is zero ( 0 = all done) cmp.eq pt2 = 0,t14 // If the current descriptor is zero get the next descriptor cmp.eq pt3 = 1,t14 // Check for float cmp.eq pt4 = 2,t14 // Check for double cmp.ne pt5 = 3,t14;; // Check for dual floats (pt3) ldfs f32 = [t12];; // Load float (pt4) ldfd f32 = [t12];; // Load double (pt5) br.cond.sptk SkipDualFloat br.ctop.sptk DualFloatRegBump;; // Force an extra register rotate if dual floats DualFloatRegBump: ldfps f33,f32 = [t12];; // Load two floats SkipDualFloat: add t12 = 8,t12;; // Increment argument slot address (pt1) br.cond.sptk MoveFloat // If the mask is zero exit loop (pt2) br.cond.sptk GetNextFloatDescriptor // A zero descriptor pays a branch penality // but it does not rotate the registers br.ctop.sptk GetNextFloatDescriptor // Counted loop no penalty for branch rotate f32&pr16 ;; // // At this point the fp values are in f32-f39. Predicate registers pr16-pr23 // are set for each float found. Copy the float values to f8-f15 // MoveFloat: cmp.eq pt1 = 1, t4;; // look at the number of floats and move accordingly. (pt1) br.cond.sptk MoveOne cmp.eq pt2 = 2, t4;; (pt2) br.cond.sptk MoveTwo cmp.eq pt3 = 3, t4;; (pt3) br.cond.sptk MoveThree cmp.eq pt4 = 4, t4;; (pt4) br.cond.sptk MoveFour cmp.eq pt5 = 5, t4;; (pt5) br.cond.sptk MoveFive cmp.eq pt6 = 6, t4;; (pt6) br.cond.sptk MoveSix cmp.eq pt7 = 7, t4;; (pt7) br.cond.sptk MoveSeven cmp.eq pt8 = 8, t4;; (pt8) br.cond.sptk MoveEight br.cond.sptk DoneMoveFloat;; // we should never get here, but just in case, exit. MoveOne: mov f8 = f32 br.cond.sptk DoneMoveFloat;; MoveTwo: mov f8 = f33 mov f9 = f32 br.cond.sptk DoneMoveFloat;; MoveThree: mov f8 = f34 mov f9 = f33 mov f10 = f32 br.cond.sptk DoneMoveFloat;; MoveFour: mov f8 = f35 mov f9 = f34 mov f10 = f33 mov f11 = f32 br.cond.sptk DoneMoveFloat;; MoveFive: mov f8 = f36 mov f9 = f35 mov f10 = f34 mov f11 = f33 mov f12 = f32 br.cond.sptk DoneMoveFloat;; MoveSix: mov f8 = f37 mov f9 = f36 mov f10 = f35 mov f11 = f34 mov f12 = f33 mov f13 = f32 br.cond.sptk DoneMoveFloat;; MoveSeven: mov f8 = f38 mov f9 = f37 mov f10 = f36 mov f11 = f35 mov f12 = f34 mov f13 = f33 mov f14 = f32 br.cond.sptk DoneMoveFloat;; MoveEight: mov f8 = f39 mov f9 = f38 mov f10 = f37 mov f11 = f36 mov f12 = f35 mov f13 = f34 mov f14 = f33 mov f15 = f32 DoneMoveFloat: rum 1 << PSR_MFH NoFloat: add sp = -STACK_SCRATCH_AREA, sp // space for scratch area ld8 funcAddr = [CallFuncAddr],PlGlobalPointer-PlEntryPoint ;; ld8 gp = [CallFuncAddr] mov bt1 = funcAddr // call the function br.call.sptk brp = bt1 ;; mov ar.lc = savedLC // restore loop count register .restore mov sp = savedSP NESTED_RETURN NESTED_EXIT(Invoke) // // Define ObjectStublessClientBig routine macro. // This macro can be used for any number of arguments // #define StublessClientProc(Method) \ \ .##global ObjectStublessClient##Method; \ NESTED_ENTRY(ObjectStublessClient##Method); \ NESTED_SETUP(8, 3, 2, 0); \ /* \ * Assume we have more than 8 arguments, starting from nineth \ * argument is located STACK_SCRATCH_AREA(sp'), \ * STACK_SCRATCH_AREA+8(sp') and so on ... sp' is sp at point of \ * call \ * \ * We have to push those 8 arguments into contiguous stack \ * starting at STACK_SCRATCH_AREA(sp). A local frame size of 64 \ * bytes is allocated for the 8 arguments, 8 bytes each. \ */ \ .##fframe 64; \ add sp = -64, sp; \ ;; \ \ .##save ar##.##unat, loc2; \ mov loc2 = ar##.##unat; \ add r2 = 64+STACK_SCRATCH_AREA-8, sp; \ add r3 = STACK_SCRATCH_AREA, sp; \ ;; \ \ .##mem##.##offset 0,0; \ st8.spill [r2] = a7, -8; \ .##mem##.##offset 8,0; \ st8.spill [r3] = a0, 8; \ PROLOGUE_END \ ;; \ \ .##mem##.##offset 0,0; \ st8.spill [r2] = a6, -8; \ .##mem##.##offset 8,0; \ st8.spill [r3] = a1, 8; \ ;; \ \ .##mem##.##offset 0,0; \ st8.spill [r2] = a5, -8; \ .##mem##.##offset 8,0; \ st8.spill [r3] = a2, 8; \ ;; \ \ .##mem##.##offset 0,0; \ st8.spill [r2] = a4; \ .##mem##.##offset 8,0; \ st8.spill [r3] = a3; \ ;; \ \ mov ar##.##unat = loc2; \ add out0 = STACK_SCRATCH_AREA, sp; \ mov out1 = ##Method; \ \ br##.##call##.##sptk brp = ObjectStublessClient; \ ;; \ \ .##restore; \ add sp = 64, sp; \ NESTED_RETURN; \ NESTED_EXIT(ObjectStublessClient##Method) //++ // // Function: void __stdcall SpillFPRegsForIA64( // REGISTER_TYPE* pStack, // ULONG FloatMask // ); // // Synopsis: Given a pointer to the virtual stack and floating-point mask, // SpillFPRegsForIA64 copies the contents of the floating-point // registers to the appropriate slots in pStack. // // Arguments: pStack - Pointer to the virtual stack in memory. // // FloatMask - A mask that indicates argument slots passed as float/double registers // Each nibble indicates if the argument slot contains a float // Float : D8 F8 D7 F7 D6 F6 D5 F5 D4 F4 D3 F3 D2 F2 D1 F1 // bit position: 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 // 16 bits represents 8 slots // If both the D and F bits are set then the argument slot contains // *two* floating point args. // // Notes: In the __stdcall calling convention, the callee must pop // the parameters. // //-- NESTED_ENTRY(SpillFPRegsForIA64) NESTED_SETUP(4,4,8,0) savedSP = loc2 // savedSP aliased to loc2 savedLC = loc3 pStack = a0 // pStack aliased to first param passed in FloatMask = a1 // FloatMask aliased to second param passed in mov savedSP = sp // save sp mov savedLC = ar.lc // save lc PROLOGUE_END ARGPTR (a0) // sign-extend pStack for WIN32 //---------------------------------------------------------------- // start of main algorithm //---------------------------------------------------------------- mov t0 = FloatMask;; // FloatMask copied to t0 mov t1 = pStack // pStack copied to t1 popcnt t4 = t0;; // count number of bits in FloatMask; i.e. how many // active slots cmp.eq pt0 = 8, t4 // look at the number of parameters and branch accordingly. (pt0) br.cond.sptk ReverseFP8;; cmp.eq pt0 = 7, t4 // the fp args are ordered by their arguement order; i.e. (pt0) br.cond.sptk ReverseFP7;; // fp32 contains the first fp arg, fp32 contains the next cmp.eq pt0 = 6, t4 // fp arg...etc. (pt0) br.cond.sptk ReverseFP6;; cmp.eq pt0 = 5, t4 // rotating registers rotate downward. because of this we (pt0) br.cond.sptk ReverseFP5;; // reverse the order of the fp regs fp8 - fp15 to cmp.eq pt0 = 4, t4 // fp47 - fp40. (see ReverseFP8 to ReverseFP1) (pt0) br.cond.sptk ReverseFP4;; cmp.eq pt0 = 3, t4 (pt0) br.cond.sptk ReverseFP3;; cmp.eq pt0 = 2, t4 (pt0) br.cond.sptk ReverseFP2;; cmp.eq pt0 = 1, t4 (pt0) br.cond.sptk ReverseFP1;; ReverseFP8: // reverse fp reg order mov f40 = f15 ReverseFP7: mov f41 = f14 ReverseFP6: mov f42 = f13 ReverseFP5: mov f43 = f12 ReverseFP4: mov f44 = f11 ReverseFP3: mov f45 = f10 ReverseFP2: mov f46 = f9 ReverseFP1: mov f47 = f8 StartSpill: mov ar.lc = t4 // the maximum loop count is total fp slots used ProcessNextSlot: extr.u t10 = t0, 0, 2 // extract the two FP slot nibbles into t10 shr.u t0 = t0, 2;; // shift FloatMask, since we've extracted the slot cmp.eq pt0 = 0, t0 // check if FloatMask is zero; if so, we are done. cmp.eq pt1 = 0, t10 // check if slot is 0; i.e. not a float or double cmp.eq pt2 = 1, t10 // check first nibble of extracted slot is float cmp.eq pt3 = 2, t10 // check second nibble of extracted slot is double cmp.ne pt4 = 3, t10;; // check for dual floats (pt2) stfs [t1] = f47;; // store float at pStack (pt3) stfd [t1] = f47;; // store double at pStack (pt4) br.cond.sptk SkipDualFloat2;; stfs [t1] = f47, 4;; // store dual floats stfs [t1] = f46, -4;; br.ctop.sptk SkipDualFloat2;; // Force an extra register rotate if dual floats SkipDualFloat2: add t1 = 8, t1 // increment address to point to the next slot (pt0) br.cond.sptk Done // FloatMask is zero, so we are done (pt1) br.cond.sptk ProcessNextSlot // a zero slot pays a branch penality; but it does not // rotate the fp & pr registers br.ctop.sptk ProcessNextSlot;; // counted loop no penalty for branch rotate f32&pr16 ;; //---------------------------------------------------------------- // done, restore sp and exit //---------------------------------------------------------------- Done: mov ar.lc = savedLC // restore loop count register .restore mov sp = savedSP // restore sp NESTED_RETURN NESTED_EXIT(SpillFPRegsForIA64) StublessClientProc( 3 ) StublessClientProc( 4 ) StublessClientProc( 5 ) StublessClientProc( 6 ) StublessClientProc( 7 ) StublessClientProc( 8 ) StublessClientProc( 9 ) StublessClientProc( 10 ) StublessClientProc( 11 ) StublessClientProc( 12 ) StublessClientProc( 13 ) StublessClientProc( 14 ) StublessClientProc( 15 ) StublessClientProc( 16 ) StublessClientProc( 17 ) StublessClientProc( 18 ) StublessClientProc( 19 ) StublessClientProc( 20 ) StublessClientProc( 21 ) StublessClientProc( 22 ) StublessClientProc( 23 ) StublessClientProc( 24 ) StublessClientProc( 25 ) StublessClientProc( 26 ) StublessClientProc( 27 ) StublessClientProc( 28 ) StublessClientProc( 29 ) StublessClientProc( 30 ) StublessClientProc( 31 ) StublessClientProc( 32 ) StublessClientProc( 33 ) StublessClientProc( 34 ) StublessClientProc( 35 ) StublessClientProc( 36 ) StublessClientProc( 37 ) StublessClientProc( 38 ) StublessClientProc( 39 ) StublessClientProc( 40 ) StublessClientProc( 41 ) StublessClientProc( 42 ) StublessClientProc( 43 ) StublessClientProc( 44 ) StublessClientProc( 45 ) StublessClientProc( 46 ) StublessClientProc( 47 ) StublessClientProc( 48 ) StublessClientProc( 49 ) StublessClientProc( 50 ) StublessClientProc( 51 ) StublessClientProc( 52 ) StublessClientProc( 53 ) StublessClientProc( 54 ) StublessClientProc( 55 ) StublessClientProc( 56 ) StublessClientProc( 57 ) StublessClientProc( 58 ) StublessClientProc( 59 ) StublessClientProc( 60 ) StublessClientProc( 61 ) StublessClientProc( 62 ) StublessClientProc( 63 ) StublessClientProc( 64 ) StublessClientProc( 65 ) StublessClientProc( 66 ) StublessClientProc( 67 ) StublessClientProc( 68 ) StublessClientProc( 69 ) StublessClientProc( 70 ) StublessClientProc( 71 ) StublessClientProc( 72 ) StublessClientProc( 73 ) StublessClientProc( 74 ) StublessClientProc( 75 ) StublessClientProc( 76 ) StublessClientProc( 77 ) StublessClientProc( 78 ) StublessClientProc( 79 ) StublessClientProc( 80 ) StublessClientProc( 81 ) StublessClientProc( 82 ) StublessClientProc( 83 ) StublessClientProc( 84 ) StublessClientProc( 85 ) StublessClientProc( 86 ) StublessClientProc( 87 ) StublessClientProc( 88 ) StublessClientProc( 89 ) StublessClientProc( 90 ) StublessClientProc( 91 ) StublessClientProc( 92 ) StublessClientProc( 93 ) StublessClientProc( 94 ) StublessClientProc( 95 ) StublessClientProc( 96 ) StublessClientProc( 97 ) StublessClientProc( 98 ) StublessClientProc( 99 ) StublessClientProc( 100 ) StublessClientProc( 101 ) StublessClientProc( 102 ) StublessClientProc( 103 ) StublessClientProc( 104 ) StublessClientProc( 105 ) StublessClientProc( 106 ) StublessClientProc( 107 ) StublessClientProc( 108 ) StublessClientProc( 109 ) StublessClientProc( 110 ) StublessClientProc( 111 ) StublessClientProc( 112 ) StublessClientProc( 113 ) StublessClientProc( 114 ) StublessClientProc( 115 ) StublessClientProc( 116 ) StublessClientProc( 117 ) StublessClientProc( 118 ) StublessClientProc( 119 ) StublessClientProc( 120 ) StublessClientProc( 121 ) StublessClientProc( 122 ) StublessClientProc( 123 ) StublessClientProc( 124 ) StublessClientProc( 125 ) StublessClientProc( 126 ) StublessClientProc( 127 ) StublessClientProc( 128 ) StublessClientProc( 129 ) StublessClientProc( 130 ) StublessClientProc( 131 ) StublessClientProc( 132 ) StublessClientProc( 133 ) StublessClientProc( 134 ) StublessClientProc( 135 ) StublessClientProc( 136 ) StublessClientProc( 137 ) StublessClientProc( 138 ) StublessClientProc( 139 ) StublessClientProc( 140 ) StublessClientProc( 141 ) StublessClientProc( 142 ) StublessClientProc( 143 ) StublessClientProc( 144 ) StublessClientProc( 145 ) StublessClientProc( 146 ) StublessClientProc( 147 ) StublessClientProc( 148 ) StublessClientProc( 149 ) StublessClientProc( 150 ) StublessClientProc( 151 ) StublessClientProc( 152 ) StublessClientProc( 153 ) StublessClientProc( 154 ) StublessClientProc( 155 ) StublessClientProc( 156 ) StublessClientProc( 157 ) StublessClientProc( 158 ) StublessClientProc( 159 ) StublessClientProc( 160 ) StublessClientProc( 161 ) StublessClientProc( 162 ) StublessClientProc( 163 ) StublessClientProc( 164 ) StublessClientProc( 165 ) StublessClientProc( 166 ) StublessClientProc( 167 ) StublessClientProc( 168 ) StublessClientProc( 169 ) StublessClientProc( 170 ) StublessClientProc( 171 ) StublessClientProc( 172 ) StublessClientProc( 173 ) StublessClientProc( 174 ) StublessClientProc( 175 ) StublessClientProc( 176 ) StublessClientProc( 177 ) StublessClientProc( 178 ) StublessClientProc( 179 ) StublessClientProc( 180 ) StublessClientProc( 181 ) StublessClientProc( 182 ) StublessClientProc( 183 ) StublessClientProc( 184 ) StublessClientProc( 185 ) StublessClientProc( 186 ) StublessClientProc( 187 ) StublessClientProc( 188 ) StublessClientProc( 189 ) StublessClientProc( 190 ) StublessClientProc( 191 ) StublessClientProc( 192 ) StublessClientProc( 193 ) StublessClientProc( 194 ) StublessClientProc( 195 ) StublessClientProc( 196 ) StublessClientProc( 197 ) StublessClientProc( 198 ) StublessClientProc( 199 ) StublessClientProc( 200 ) StublessClientProc( 201 ) StublessClientProc( 202 ) StublessClientProc( 203 ) StublessClientProc( 204 ) StublessClientProc( 205 ) StublessClientProc( 206 ) StublessClientProc( 207 ) StublessClientProc( 208 ) StublessClientProc( 209 ) StublessClientProc( 210 ) StublessClientProc( 211 ) StublessClientProc( 212 ) StublessClientProc( 213 ) StublessClientProc( 214 ) StublessClientProc( 215 ) StublessClientProc( 216 ) StublessClientProc( 217 ) StublessClientProc( 218 ) StublessClientProc( 219 ) StublessClientProc( 220 ) StublessClientProc( 221 ) StublessClientProc( 222 ) StublessClientProc( 223 ) StublessClientProc( 224 ) StublessClientProc( 225 ) StublessClientProc( 226 ) StublessClientProc( 227 ) StublessClientProc( 228 ) StublessClientProc( 229 ) StublessClientProc( 230 ) StublessClientProc( 231 ) StublessClientProc( 232 ) StublessClientProc( 233 ) StublessClientProc( 234 ) StublessClientProc( 235 ) StublessClientProc( 236 ) StublessClientProc( 237 ) StublessClientProc( 238 ) StublessClientProc( 239 ) StublessClientProc( 240 ) StublessClientProc( 241 ) StublessClientProc( 242 ) StublessClientProc( 243 ) StublessClientProc( 244 ) StublessClientProc( 245 ) StublessClientProc( 246 ) StublessClientProc( 247 ) StublessClientProc( 248 ) StublessClientProc( 249 ) StublessClientProc( 250 ) StublessClientProc( 251 ) StublessClientProc( 252 ) StublessClientProc( 253 ) StublessClientProc( 254 ) StublessClientProc( 255 ) StublessClientProc( 256 ) StublessClientProc( 257 ) StublessClientProc( 258 ) StublessClientProc( 259 ) StublessClientProc( 260 ) StublessClientProc( 261 ) StublessClientProc( 262 ) StublessClientProc( 263 ) StublessClientProc( 264 ) StublessClientProc( 265 ) StublessClientProc( 266 ) StublessClientProc( 267 ) StublessClientProc( 268 ) StublessClientProc( 269 ) StublessClientProc( 270 ) StublessClientProc( 271 ) StublessClientProc( 272 ) StublessClientProc( 273 ) StublessClientProc( 274 ) StublessClientProc( 275 ) StublessClientProc( 276 ) StublessClientProc( 277 ) StublessClientProc( 278 ) StublessClientProc( 279 ) StublessClientProc( 280 ) StublessClientProc( 281 ) StublessClientProc( 282 ) StublessClientProc( 283 ) StublessClientProc( 284 ) StublessClientProc( 285 ) StublessClientProc( 286 ) StublessClientProc( 287 ) StublessClientProc( 288 ) StublessClientProc( 289 ) StublessClientProc( 290 ) StublessClientProc( 291 ) StublessClientProc( 292 ) StublessClientProc( 293 ) StublessClientProc( 294 ) StublessClientProc( 295 ) StublessClientProc( 296 ) StublessClientProc( 297 ) StublessClientProc( 298 ) StublessClientProc( 299 ) StublessClientProc( 300 ) StublessClientProc( 301 ) StublessClientProc( 302 ) StublessClientProc( 303 ) StublessClientProc( 304 ) StublessClientProc( 305 ) StublessClientProc( 306 ) StublessClientProc( 307 ) StublessClientProc( 308 ) StublessClientProc( 309 ) StublessClientProc( 310 ) StublessClientProc( 311 ) StublessClientProc( 312 ) StublessClientProc( 313 ) StublessClientProc( 314 ) StublessClientProc( 315 ) StublessClientProc( 316 ) StublessClientProc( 317 ) StublessClientProc( 318 ) StublessClientProc( 319 ) StublessClientProc( 320 ) StublessClientProc( 321 ) StublessClientProc( 322 ) StublessClientProc( 323 ) StublessClientProc( 324 ) StublessClientProc( 325 ) StublessClientProc( 326 ) StublessClientProc( 327 ) StublessClientProc( 328 ) StublessClientProc( 329 ) StublessClientProc( 330 ) StublessClientProc( 331 ) StublessClientProc( 332 ) StublessClientProc( 333 ) StublessClientProc( 334 ) StublessClientProc( 335 ) StublessClientProc( 336 ) StublessClientProc( 337 ) StublessClientProc( 338 ) StublessClientProc( 339 ) StublessClientProc( 340 ) StublessClientProc( 341 ) StublessClientProc( 342 ) StublessClientProc( 343 ) StublessClientProc( 344 ) StublessClientProc( 345 ) StublessClientProc( 346 ) StublessClientProc( 347 ) StublessClientProc( 348 ) StublessClientProc( 349 ) StublessClientProc( 350 ) StublessClientProc( 351 ) StublessClientProc( 352 ) StublessClientProc( 353 ) StublessClientProc( 354 ) StublessClientProc( 355 ) StublessClientProc( 356 ) StublessClientProc( 357 ) StublessClientProc( 358 ) StublessClientProc( 359 ) StublessClientProc( 360 ) StublessClientProc( 361 ) StublessClientProc( 362 ) StublessClientProc( 363 ) StublessClientProc( 364 ) StublessClientProc( 365 ) StublessClientProc( 366 ) StublessClientProc( 367 ) StublessClientProc( 368 ) StublessClientProc( 369 ) StublessClientProc( 370 ) StublessClientProc( 371 ) StublessClientProc( 372 ) StublessClientProc( 373 ) StublessClientProc( 374 ) StublessClientProc( 375 ) StublessClientProc( 376 ) StublessClientProc( 377 ) StublessClientProc( 378 ) StublessClientProc( 379 ) StublessClientProc( 380 ) StublessClientProc( 381 ) StublessClientProc( 382 ) StublessClientProc( 383 ) StublessClientProc( 384 ) StublessClientProc( 385 ) StublessClientProc( 386 ) StublessClientProc( 387 ) StublessClientProc( 388 ) StublessClientProc( 389 ) StublessClientProc( 390 ) StublessClientProc( 391 ) StublessClientProc( 392 ) StublessClientProc( 393 ) StublessClientProc( 394 ) StublessClientProc( 395 ) StublessClientProc( 396 ) StublessClientProc( 397 ) StublessClientProc( 398 ) StublessClientProc( 399 ) StublessClientProc( 400 ) StublessClientProc( 401 ) StublessClientProc( 402 ) StublessClientProc( 403 ) StublessClientProc( 404 ) StublessClientProc( 405 ) StublessClientProc( 406 ) StublessClientProc( 407 ) StublessClientProc( 408 ) StublessClientProc( 409 ) StublessClientProc( 410 ) StublessClientProc( 411 ) StublessClientProc( 412 ) StublessClientProc( 413 ) StublessClientProc( 414 ) StublessClientProc( 415 ) StublessClientProc( 416 ) StublessClientProc( 417 ) StublessClientProc( 418 ) StublessClientProc( 419 ) StublessClientProc( 420 ) StublessClientProc( 421 ) StublessClientProc( 422 ) StublessClientProc( 423 ) StublessClientProc( 424 ) StublessClientProc( 425 ) StublessClientProc( 426 ) StublessClientProc( 427 ) StublessClientProc( 428 ) StublessClientProc( 429 ) StublessClientProc( 430 ) StublessClientProc( 431 ) StublessClientProc( 432 ) StublessClientProc( 433 ) StublessClientProc( 434 ) StublessClientProc( 435 ) StublessClientProc( 436 ) StublessClientProc( 437 ) StublessClientProc( 438 ) StublessClientProc( 439 ) StublessClientProc( 440 ) StublessClientProc( 441 ) StublessClientProc( 442 ) StublessClientProc( 443 ) StublessClientProc( 444 ) StublessClientProc( 445 ) StublessClientProc( 446 ) StublessClientProc( 447 ) StublessClientProc( 448 ) StublessClientProc( 449 ) StublessClientProc( 450 ) StublessClientProc( 451 ) StublessClientProc( 452 ) StublessClientProc( 453 ) StublessClientProc( 454 ) StublessClientProc( 455 ) StublessClientProc( 456 ) StublessClientProc( 457 ) StublessClientProc( 458 ) StublessClientProc( 459 ) StublessClientProc( 460 ) StublessClientProc( 461 ) StublessClientProc( 462 ) StublessClientProc( 463 ) StublessClientProc( 464 ) StublessClientProc( 465 ) StublessClientProc( 466 ) StublessClientProc( 467 ) StublessClientProc( 468 ) StublessClientProc( 469 ) StublessClientProc( 470 ) StublessClientProc( 471 ) StublessClientProc( 472 ) StublessClientProc( 473 ) StublessClientProc( 474 ) StublessClientProc( 475 ) StublessClientProc( 476 ) StublessClientProc( 477 ) StublessClientProc( 478 ) StublessClientProc( 479 ) StublessClientProc( 480 ) StublessClientProc( 481 ) StublessClientProc( 482 ) StublessClientProc( 483 ) StublessClientProc( 484 ) StublessClientProc( 485 ) StublessClientProc( 486 ) StublessClientProc( 487 ) StublessClientProc( 488 ) StublessClientProc( 489 ) StublessClientProc( 490 ) StublessClientProc( 491 ) StublessClientProc( 492 ) StublessClientProc( 493 ) StublessClientProc( 494 ) StublessClientProc( 495 ) StublessClientProc( 496 ) StublessClientProc( 497 ) StublessClientProc( 498 ) StublessClientProc( 499 ) StublessClientProc( 500 ) StublessClientProc( 501 ) StublessClientProc( 502 ) StublessClientProc( 503 ) StublessClientProc( 504 ) StublessClientProc( 505 ) StublessClientProc( 506 ) StublessClientProc( 507 ) StublessClientProc( 508 ) StublessClientProc( 509 ) StublessClientProc( 510 ) StublessClientProc( 511 ) StublessClientProc( 512 ) StublessClientProc( 513 ) StublessClientProc( 514 ) StublessClientProc( 515 ) StublessClientProc( 516 ) StublessClientProc( 517 ) StublessClientProc( 518 ) StublessClientProc( 519 ) StublessClientProc( 520 ) StublessClientProc( 521 ) StublessClientProc( 522 ) StublessClientProc( 523 ) StublessClientProc( 524 ) StublessClientProc( 525 ) StublessClientProc( 526 ) StublessClientProc( 527 ) StublessClientProc( 528 ) StublessClientProc( 529 ) StublessClientProc( 530 ) StublessClientProc( 531 ) StublessClientProc( 532 ) StublessClientProc( 533 ) StublessClientProc( 534 ) StublessClientProc( 535 ) StublessClientProc( 536 ) StublessClientProc( 537 ) StublessClientProc( 538 ) StublessClientProc( 539 ) StublessClientProc( 540 ) StublessClientProc( 541 ) StublessClientProc( 542 ) StublessClientProc( 543 ) StublessClientProc( 544 ) StublessClientProc( 545 ) StublessClientProc( 546 ) StublessClientProc( 547 ) StublessClientProc( 548 ) StublessClientProc( 549 ) StublessClientProc( 550 ) StublessClientProc( 551 ) StublessClientProc( 552 ) StublessClientProc( 553 ) StublessClientProc( 554 ) StublessClientProc( 555 ) StublessClientProc( 556 ) StublessClientProc( 557 ) StublessClientProc( 558 ) StublessClientProc( 559 ) StublessClientProc( 560 ) StublessClientProc( 561 ) StublessClientProc( 562 ) StublessClientProc( 563 ) StublessClientProc( 564 ) StublessClientProc( 565 ) StublessClientProc( 566 ) StublessClientProc( 567 ) StublessClientProc( 568 ) StublessClientProc( 569 ) StublessClientProc( 570 ) StublessClientProc( 571 ) StublessClientProc( 572 ) StublessClientProc( 573 ) StublessClientProc( 574 ) StublessClientProc( 575 ) StublessClientProc( 576 ) StublessClientProc( 577 ) StublessClientProc( 578 ) StublessClientProc( 579 ) StublessClientProc( 580 ) StublessClientProc( 581 ) StublessClientProc( 582 ) StublessClientProc( 583 ) StublessClientProc( 584 ) StublessClientProc( 585 ) StublessClientProc( 586 ) StublessClientProc( 587 ) StublessClientProc( 588 ) StublessClientProc( 589 ) StublessClientProc( 590 ) StublessClientProc( 591 ) StublessClientProc( 592 ) StublessClientProc( 593 ) StublessClientProc( 594 ) StublessClientProc( 595 ) StublessClientProc( 596 ) StublessClientProc( 597 ) StublessClientProc( 598 ) StublessClientProc( 599 ) StublessClientProc( 600 ) StublessClientProc( 601 ) StublessClientProc( 602 ) StublessClientProc( 603 ) StublessClientProc( 604 ) StublessClientProc( 605 ) StublessClientProc( 606 ) StublessClientProc( 607 ) StublessClientProc( 608 ) StublessClientProc( 609 ) StublessClientProc( 610 ) StublessClientProc( 611 ) StublessClientProc( 612 ) StublessClientProc( 613 ) StublessClientProc( 614 ) StublessClientProc( 615 ) StublessClientProc( 616 ) StublessClientProc( 617 ) StublessClientProc( 618 ) StublessClientProc( 619 ) StublessClientProc( 620 ) StublessClientProc( 621 ) StublessClientProc( 622 ) StublessClientProc( 623 ) StublessClientProc( 624 ) StublessClientProc( 625 ) StublessClientProc( 626 ) StublessClientProc( 627 ) StublessClientProc( 628 ) StublessClientProc( 629 ) StublessClientProc( 630 ) StublessClientProc( 631 ) StublessClientProc( 632 ) StublessClientProc( 633 ) StublessClientProc( 634 ) StublessClientProc( 635 ) StublessClientProc( 636 ) StublessClientProc( 637 ) StublessClientProc( 638 ) StublessClientProc( 639 ) StublessClientProc( 640 ) StublessClientProc( 641 ) StublessClientProc( 642 ) StublessClientProc( 643 ) StublessClientProc( 644 ) StublessClientProc( 645 ) StublessClientProc( 646 ) StublessClientProc( 647 ) StublessClientProc( 648 ) StublessClientProc( 649 ) StublessClientProc( 650 ) StublessClientProc( 651 ) StublessClientProc( 652 ) StublessClientProc( 653 ) StublessClientProc( 654 ) StublessClientProc( 655 ) StublessClientProc( 656 ) StublessClientProc( 657 ) StublessClientProc( 658 ) StublessClientProc( 659 ) StublessClientProc( 660 ) StublessClientProc( 661 ) StublessClientProc( 662 ) StublessClientProc( 663 ) StublessClientProc( 664 ) StublessClientProc( 665 ) StublessClientProc( 666 ) StublessClientProc( 667 ) StublessClientProc( 668 ) StublessClientProc( 669 ) StublessClientProc( 670 ) StublessClientProc( 671 ) StublessClientProc( 672 ) StublessClientProc( 673 ) StublessClientProc( 674 ) StublessClientProc( 675 ) StublessClientProc( 676 ) StublessClientProc( 677 ) StublessClientProc( 678 ) StublessClientProc( 679 ) StublessClientProc( 680 ) StublessClientProc( 681 ) StublessClientProc( 682 ) StublessClientProc( 683 ) StublessClientProc( 684 ) StublessClientProc( 685 ) StublessClientProc( 686 ) StublessClientProc( 687 ) StublessClientProc( 688 ) StublessClientProc( 689 ) StublessClientProc( 690 ) StublessClientProc( 691 ) StublessClientProc( 692 ) StublessClientProc( 693 ) StublessClientProc( 694 ) StublessClientProc( 695 ) StublessClientProc( 696 ) StublessClientProc( 697 ) StublessClientProc( 698 ) StublessClientProc( 699 ) StublessClientProc( 700 ) StublessClientProc( 701 ) StublessClientProc( 702 ) StublessClientProc( 703 ) StublessClientProc( 704 ) StublessClientProc( 705 ) StublessClientProc( 706 ) StublessClientProc( 707 ) StublessClientProc( 708 ) StublessClientProc( 709 ) StublessClientProc( 710 ) StublessClientProc( 711 ) StublessClientProc( 712 ) StublessClientProc( 713 ) StublessClientProc( 714 ) StublessClientProc( 715 ) StublessClientProc( 716 ) StublessClientProc( 717 ) StublessClientProc( 718 ) StublessClientProc( 719 ) StublessClientProc( 720 ) StublessClientProc( 721 ) StublessClientProc( 722 ) StublessClientProc( 723 ) StublessClientProc( 724 ) StublessClientProc( 725 ) StublessClientProc( 726 ) StublessClientProc( 727 ) StublessClientProc( 728 ) StublessClientProc( 729 ) StublessClientProc( 730 ) StublessClientProc( 731 ) StublessClientProc( 732 ) StublessClientProc( 733 ) StublessClientProc( 734 ) StublessClientProc( 735 ) StublessClientProc( 736 ) StublessClientProc( 737 ) StublessClientProc( 738 ) StublessClientProc( 739 ) StublessClientProc( 740 ) StublessClientProc( 741 ) StublessClientProc( 742 ) StublessClientProc( 743 ) StublessClientProc( 744 ) StublessClientProc( 745 ) StublessClientProc( 746 ) StublessClientProc( 747 ) StublessClientProc( 748 ) StublessClientProc( 749 ) StublessClientProc( 750 ) StublessClientProc( 751 ) StublessClientProc( 752 ) StublessClientProc( 753 ) StublessClientProc( 754 ) StublessClientProc( 755 ) StublessClientProc( 756 ) StublessClientProc( 757 ) StublessClientProc( 758 ) StublessClientProc( 759 ) StublessClientProc( 760 ) StublessClientProc( 761 ) StublessClientProc( 762 ) StublessClientProc( 763 ) StublessClientProc( 764 ) StublessClientProc( 765 ) StublessClientProc( 766 ) StublessClientProc( 767 ) StublessClientProc( 768 ) StublessClientProc( 769 ) StublessClientProc( 770 ) StublessClientProc( 771 ) StublessClientProc( 772 ) StublessClientProc( 773 ) StublessClientProc( 774 ) StublessClientProc( 775 ) StublessClientProc( 776 ) StublessClientProc( 777 ) StublessClientProc( 778 ) StublessClientProc( 779 ) StublessClientProc( 780 ) StublessClientProc( 781 ) StublessClientProc( 782 ) StublessClientProc( 783 ) StublessClientProc( 784 ) StublessClientProc( 785 ) StublessClientProc( 786 ) StublessClientProc( 787 ) StublessClientProc( 788 ) StublessClientProc( 789 ) StublessClientProc( 790 ) StublessClientProc( 791 ) StublessClientProc( 792 ) StublessClientProc( 793 ) StublessClientProc( 794 ) StublessClientProc( 795 ) StublessClientProc( 796 ) StublessClientProc( 797 ) StublessClientProc( 798 ) StublessClientProc( 799 ) StublessClientProc( 800 ) StublessClientProc( 801 ) StublessClientProc( 802 ) StublessClientProc( 803 ) StublessClientProc( 804 ) StublessClientProc( 805 ) StublessClientProc( 806 ) StublessClientProc( 807 ) StublessClientProc( 808 ) StublessClientProc( 809 ) StublessClientProc( 810 ) StublessClientProc( 811 ) StublessClientProc( 812 ) StublessClientProc( 813 ) StublessClientProc( 814 ) StublessClientProc( 815 ) StublessClientProc( 816 ) StublessClientProc( 817 ) StublessClientProc( 818 ) StublessClientProc( 819 ) StublessClientProc( 820 ) StublessClientProc( 821 ) StublessClientProc( 822 ) StublessClientProc( 823 ) StublessClientProc( 824 ) StublessClientProc( 825 ) StublessClientProc( 826 ) StublessClientProc( 827 ) StublessClientProc( 828 ) StublessClientProc( 829 ) StublessClientProc( 830 ) StublessClientProc( 831 ) StublessClientProc( 832 ) StublessClientProc( 833 ) StublessClientProc( 834 ) StublessClientProc( 835 ) StublessClientProc( 836 ) StublessClientProc( 837 ) StublessClientProc( 838 ) StublessClientProc( 839 ) StublessClientProc( 840 ) StublessClientProc( 841 ) StublessClientProc( 842 ) StublessClientProc( 843 ) StublessClientProc( 844 ) StublessClientProc( 845 ) StublessClientProc( 846 ) StublessClientProc( 847 ) StublessClientProc( 848 ) StublessClientProc( 849 ) StublessClientProc( 850 ) StublessClientProc( 851 ) StublessClientProc( 852 ) StublessClientProc( 853 ) StublessClientProc( 854 ) StublessClientProc( 855 ) StublessClientProc( 856 ) StublessClientProc( 857 ) StublessClientProc( 858 ) StublessClientProc( 859 ) StublessClientProc( 860 ) StublessClientProc( 861 ) StublessClientProc( 862 ) StublessClientProc( 863 ) StublessClientProc( 864 ) StublessClientProc( 865 ) StublessClientProc( 866 ) StublessClientProc( 867 ) StublessClientProc( 868 ) StublessClientProc( 869 ) StublessClientProc( 870 ) StublessClientProc( 871 ) StublessClientProc( 872 ) StublessClientProc( 873 ) StublessClientProc( 874 ) StublessClientProc( 875 ) StublessClientProc( 876 ) StublessClientProc( 877 ) StublessClientProc( 878 ) StublessClientProc( 879 ) StublessClientProc( 880 ) StublessClientProc( 881 ) StublessClientProc( 882 ) StublessClientProc( 883 ) StublessClientProc( 884 ) StublessClientProc( 885 ) StublessClientProc( 886 ) StublessClientProc( 887 ) StublessClientProc( 888 ) StublessClientProc( 889 ) StublessClientProc( 890 ) StublessClientProc( 891 ) StublessClientProc( 892 ) StublessClientProc( 893 ) StublessClientProc( 894 ) StublessClientProc( 895 ) StublessClientProc( 896 ) StublessClientProc( 897 ) StublessClientProc( 898 ) StublessClientProc( 899 ) StublessClientProc( 900 ) StublessClientProc( 901 ) StublessClientProc( 902 ) StublessClientProc( 903 ) StublessClientProc( 904 ) StublessClientProc( 905 ) StublessClientProc( 906 ) StublessClientProc( 907 ) StublessClientProc( 908 ) StublessClientProc( 909 ) StublessClientProc( 910 ) StublessClientProc( 911 ) StublessClientProc( 912 ) StublessClientProc( 913 ) StublessClientProc( 914 ) StublessClientProc( 915 ) StublessClientProc( 916 ) StublessClientProc( 917 ) StublessClientProc( 918 ) StublessClientProc( 919 ) StublessClientProc( 920 ) StublessClientProc( 921 ) StublessClientProc( 922 ) StublessClientProc( 923 ) StublessClientProc( 924 ) StublessClientProc( 925 ) StublessClientProc( 926 ) StublessClientProc( 927 ) StublessClientProc( 928 ) StublessClientProc( 929 ) StublessClientProc( 930 ) StublessClientProc( 931 ) StublessClientProc( 932 ) StublessClientProc( 933 ) StublessClientProc( 934 ) StublessClientProc( 935 ) StublessClientProc( 936 ) StublessClientProc( 937 ) StublessClientProc( 938 ) StublessClientProc( 939 ) StublessClientProc( 940 ) StublessClientProc( 941 ) StublessClientProc( 942 ) StublessClientProc( 943 ) StublessClientProc( 944 ) StublessClientProc( 945 ) StublessClientProc( 946 ) StublessClientProc( 947 ) StublessClientProc( 948 ) StublessClientProc( 949 ) StublessClientProc( 950 ) StublessClientProc( 951 ) StublessClientProc( 952 ) StublessClientProc( 953 ) StublessClientProc( 954 ) StublessClientProc( 955 ) StublessClientProc( 956 ) StublessClientProc( 957 ) StublessClientProc( 958 ) StublessClientProc( 959 ) StublessClientProc( 960 ) StublessClientProc( 961 ) StublessClientProc( 962 ) StublessClientProc( 963 ) StublessClientProc( 964 ) StublessClientProc( 965 ) StublessClientProc( 966 ) StublessClientProc( 967 ) StublessClientProc( 968 ) StublessClientProc( 969 ) StublessClientProc( 970 ) StublessClientProc( 971 ) StublessClientProc( 972 ) StublessClientProc( 973 ) StublessClientProc( 974 ) StublessClientProc( 975 ) StublessClientProc( 976 ) StublessClientProc( 977 ) StublessClientProc( 978 ) StublessClientProc( 979 ) StublessClientProc( 980 ) StublessClientProc( 981 ) StublessClientProc( 982 ) StublessClientProc( 983 ) StublessClientProc( 984 ) StublessClientProc( 985 ) StublessClientProc( 986 ) StublessClientProc( 987 ) StublessClientProc( 988 ) StublessClientProc( 989 ) StublessClientProc( 990 ) StublessClientProc( 991 ) StublessClientProc( 992 ) StublessClientProc( 993 ) StublessClientProc( 994 ) StublessClientProc( 995 ) StublessClientProc( 996 ) StublessClientProc( 997 ) StublessClientProc( 998 ) StublessClientProc( 999 ) StublessClientProc( 1000 ) StublessClientProc( 1001 ) StublessClientProc( 1002 ) StublessClientProc( 1003 ) StublessClientProc( 1004 ) StublessClientProc( 1005 ) StublessClientProc( 1006 ) StublessClientProc( 1007 ) StublessClientProc( 1008 ) StublessClientProc( 1009 ) StublessClientProc( 1010 ) StublessClientProc( 1011 ) StublessClientProc( 1012 ) StublessClientProc( 1013 ) StublessClientProc( 1014 ) StublessClientProc( 1015 ) StublessClientProc( 1016 ) StublessClientProc( 1017 ) StublessClientProc( 1018 ) StublessClientProc( 1019 ) StublessClientProc( 1020 ) StublessClientProc( 1021 ) StublessClientProc( 1022 ) StublessClientProc( 1023 )