RE: I give...anything inherently wrong with this code that would cause this error?
Nah...I don't like drugs or badminton... -Original Message- From: Will Tomlinson [mailto:w...@wtomlinson.com] Sent: Friday, March 06, 2009 7:09 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? >Thanks, everyone, for pointing out the goofy errors in the attributes. >I don't know how I got those in there...copy and paste gone wild, or >something. >Maybe just old-age confusion... :o) Rick, have you thought about just quitting CF altogether? And maybe taking up PHP or .NET?? :) Will ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320198 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
You know Will, PHP and .NET aren't any easier to learn than CF. ;) William -- William E. Seiter Need to have your mortgage modified? I charge no fees until I am successful, then I charge almost half the rate you would find elsewhere. Professional. Dedicated. Effective. The Easy 24/7 way to get started: http://www.goldengrove.net/ or you can call: (626) 593 - 5501 -Original Message- From: Will Tomlinson [mailto:w...@wtomlinson.com] Sent: Friday, March 06, 2009 4:09 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? >Thanks, everyone, for pointing out the goofy errors in the attributes. >I don't know how I got those in there...copy and paste gone wild, or >something. >Maybe just old-age confusion... :o) Rick, have you thought about just quitting CF altogether? And maybe taking up PHP or .NET?? :) Will ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320196 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Re: I give...anything inherently wrong with this code that would cause this error?
>Thanks, everyone, for pointing out the goofy errors in the attributes. >I don't know how I got those in there...copy and paste gone wild, or >something. >Maybe just old-age confusion... :o) Rick, have you thought about just quitting CF altogether? And maybe taking up PHP or .NET?? :) Will ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320192 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: I give...anything inherently wrong with this code that would cause this error?
Thanks, everyone, for pointing out the goofy errors in the attributes. I don't know how I got those in there...copy and paste gone wild, or something. Maybe just old-age confusion... :o) Anyway, I got that straightened out and am one to some other errors with expandPath and variables involved. Making progress.. Thanks, again! Rick -Original Message- From: Kris Jones [mailto:kris.jon...@verizon.net] Sent: Friday, March 06, 2009 4:01 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? This validates by calling the cfc directly. Haven't actually called the function, but I think this would work: Take a look at: the array references you have in there -- doesn't look okay to me. Also, check the way you are calling the function. THat may actually be the issue. Cheers, Kris ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320191 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: I give...anything inherently wrong with this code that would cause this error?
This validates by calling the cfc directly. Haven't actually called the function, but I think this would work: Take a look at: the array references you have in there -- doesn't look okay to me. Also, check the way you are calling the function. THat may actually be the issue. Cheers, Kris ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320186 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
So, your function definition has been simplified like the below and it's still throwing the error? ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320184 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
Nope...still calls out the returnType = "stuct" line as a problem. -Original Message- From: William Seiter [mailto:will...@seiter.com] Sent: Friday, March 06, 2009 1:34 PM To: cf-talk Subject: RE: I give...anything inherently wrong with this code that would cause this error? Remove this part and see if it works. argumentCollection = "#form#" -- William E. Seiter Need to have your mortgage modified? I charge no fees until I am successful, then I charge almost half the rate you would find elsewhere. Professional. Dedicated. Effective. The Easy 24/7 way to get started: http://www.goldengrove.net/ or you can call: (626) 593 - 5501 -Original Message- From: Rick Faircloth [mailto:r...@whitestonemedia.com] Sent: Friday, March 06, 2009 10:29 AM To: cf-talk Subject: I give...anything inherently wrong with this code that would cause this error? Here's the error from CF: "This expression must have a constant value." The compiler was processing: - A cffunction tag beginning on line 72, column 10. The error occurred in E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing.cfc, line 79. (Line 79 is: returnType = "struct") If I take out that line, then the error just references the line before it: access = "remote". Without going into a thousand lines of code upfront, I was wondering if anything was wrong with this code up to this point. I've never gotten this error before (but, then again, I've never tried to do some of the things I'm doing with this, either.) Thanks, Rick - "A government big enough to give you everything you want is big enough to take away everything you have." - Thomas Jefferson ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320182 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
Doh! You're absolutely right, but even with it gone, I still get the same error... -Original Message- From: Francois Levesque [mailto:cfab...@gmail.com] Sent: Friday, March 06, 2009 1:36 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? argumentCollection in the cffunction tag? I don't see that in the docs. You can use it when calling the function, but not while defining it. Maybe that's what's throwing the weird error. Francois Levesque http://blog.critical-web.com/ On Fri, Mar 6, 2009 at 1:28 PM, Rick Faircloth wrote: > > Here's the error from CF: > > > > "This expression must have a constant value." > > > > The compiler was processing: > > - A cffunction tag beginning on line 72, column 10. > > The error occurred in > E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing > .cfc, > line 79. > > (Line 79 is: returnType = "struct") If I take out that line, then > the error just references the line before it: access = "remote". > > > > Without going into a thousand lines of code upfront, I was wondering > if anything was wrong with this code > > up to this point. I've never gotten this error before (but, then > again, I've never tried to do some of the things > > I'm doing with this, either.) > > > > Thanks, > > > > Rick > > > > > > > displayname = > "fnProcessForm" > > argumentCollection = "#form#" > > dsn= > "#application.dsn#" > > hint = > "Processes Submitted Form" > > output = "false" > > access = > "remote" > > returnType= "struct"> > > > > > required = "yes"> > > > > > > > > > > > > > > > > -- > -- > - > > "A government big enough to give you everything you want is big enough > to take away everything you have." > > - Thomas Jefferson > > > > > > ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320181 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
Pete, I guess I've never seen it done like that before. I have always seen either Arg collection OR specific vars. I didn't know you could mix and match (or if I knew I forgot:). Nice tip! -mark Mark A. Kruger, CFG, MCSE (402) 408-3733 ext 105 www.cfwebtools.com www.coldfusionmuse.com www.necfug.com -Original Message- From: Peter Boughton [mailto:bought...@gmail.com] Sent: Friday, March 06, 2009 1:09 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? Even treating it as a function call, copying application vars into form scope is not recommended, nor necessary. It is perfectly acceptable, and more readable, to do this: processForm( ArgumentCollection = Form , DSN = Application.DSN ) CF will use ArgumentCollection values unless there is a specific argument overriding it. ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320180 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: I give...anything inherently wrong with this code that would cause this error?
Even treating it as a function call, copying application vars into form scope is not recommended, nor necessary. It is perfectly acceptable, and more readable, to do this: processForm( ArgumentCollection = Form , DSN = Application.DSN ) CF will use ArgumentCollection values unless there is a specific argument overriding it. ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320179 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: I give...anything inherently wrong with this code that would cause this error?
Ooh... Right... I was thinking it was a call but it's not it's a definition... Both argumentcollection and dsn are wrong. -mark Mark A. Kruger, CFG, MCSE (402) 408-3733 ext 105 www.cfwebtools.com www.coldfusionmuse.com www.necfug.com -Original Message- From: Francois Levesque [mailto:cfab...@gmail.com] Sent: Friday, March 06, 2009 12:36 PM To: cf-talk Subject: Re: I give...anything inherently wrong with this code that would cause this error? argumentCollection in the cffunction tag? I don't see that in the docs. You can use it when calling the function, but not while defining it. Maybe that's what's throwing the weird error. Francois Levesque http://blog.critical-web.com/ On Fri, Mar 6, 2009 at 1:28 PM, Rick Faircloth wrote: > > Here's the error from CF: > > > > "This expression must have a constant value." > > > > The compiler was processing: > > - A cffunction tag beginning on line 72, column 10. > > The error occurred in > E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing > .cfc, > line 79. > > (Line 79 is: returnType = "struct") If I take out that line, then > the error just references the line before it: access = "remote". > > > > Without going into a thousand lines of code upfront, I was wondering > if anything was wrong with this code > > up to this point. I've never gotten this error before (but, then > again, I've never tried to do some of the things > > I'm doing with this, either.) > > > > Thanks, > > > > Rick > > > > > > > displayname = > "fnProcessForm" > > argumentCollection = "#form#" > > dsn= > "#application.dsn#" > > hint = > "Processes Submitted Form" > > output = "false" > > access = > "remote" > > returnType= "struct"> > > > > > required = "yes"> > > > > > > > > > > > > > > > > -- > -- > - > > "A government big enough to give you everything you want is big enough > to take away everything you have." > > - Thomas Jefferson > > > > > > ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320178 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
What's with the "DSN" line? Kind of an arbitrary attribute... That's not part of the function tags attributes... Should the "dsn" var be part of the argumentcollection? I would think it should be something like -Mark Mark A. Kruger, CFG, MCSE (402) 408-3733 ext 105 www.cfwebtools.com www.coldfusionmuse.com www.necfug.com -Original Message- From: Rick Faircloth [mailto:r...@whitestonemedia.com] Sent: Friday, March 06, 2009 12:29 PM To: cf-talk Subject: I give...anything inherently wrong with this code that would cause this error? Here's the error from CF: "This expression must have a constant value." The compiler was processing: - A cffunction tag beginning on line 72, column 10. The error occurred in E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing.cfc, line 79. (Line 79 is: returnType = "struct") If I take out that line, then the error just references the line before it: access = "remote". Without going into a thousand lines of code upfront, I was wondering if anything was wrong with this code up to this point. I've never gotten this error before (but, then again, I've never tried to do some of the things I'm doing with this, either.) Thanks, Rick - "A government big enough to give you everything you want is big enough to take away everything you have." - Thomas Jefferson ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320176 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: I give...anything inherently wrong with this code that would cause this error?
Neither "argumentCollection" nor "dsn" are attributes of the cffunction tag. On Fri, Mar 6, 2009 at 1:28 PM, Rick Faircloth wrote: > > > displayname = > "fnProcessForm" > > argumentCollection = "#form#" > > dsn= > "#application.dsn#" > > -- Thanks, Tom Tom McNeer MediumCool http://www.mediumcool.com 1735 Johnson Road NE Atlanta, GA 30306 404.589.0560 ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320174 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: I give...anything inherently wrong with this code that would cause this error?
The attribute values of the cffunction aren't constants. I'm guessing the ones you've added, argumentCollection and dsn, can't be variables. Adrian > -Original Message- > From: Rick Faircloth [mailto:r...@whitestonemedia.com] > Sent: 06 March 2009 18:29 > To: cf-talk > Subject: I give...anything inherently wrong with this code that would > cause this error? > > > Here's the error from CF: > > > > "This expression must have a constant value." > > > > The compiler was processing: > > - A cffunction tag beginning on line 72, column 10. > > The error occurred in > E:\Inetpub\webroot\wsm- > dev\jQuery\ajax_file_upload_two\form_processing.cfc, > line 79. > > (Line 79 is: returnType = "struct") If I take out that line, then the > error just references the line before it: access = "remote". > > > > Without going into a thousand lines of code upfront, I was wondering if > anything was wrong with this code > > up to this point. I've never gotten this error before (but, then > again, > I've never tried to do some of the things > > I'm doing with this, either.) > > > > Thanks, > > > > Rick > > > > > > "fnProcessForm" > > displayname = > "fnProcessForm" > > argumentCollection = "#form#" > > dsn= > "#application.dsn#" > > hint = > "Processes Submitted Form" > > output = > "false" > > access = > "remote" > > returnType= > "struct"> > > > > >"string" > required = "yes"> > > > > > > > > > > > > > > > --- > - > - > > "A government big enough to give you everything you want is big enough > to > take away everything you have." > > - Thomas Jefferson > > > > > > ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320173 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: I give...anything inherently wrong with this code that would cause this error?
The error message tells you what is wrong. >"This expression must have a constant value." i.e. This expression must NOT be a variable. Unfortunately, CF cannot point precisely at the expression - it can only tell you that it is within the cffunction tag - which it does by highlighting the last line of that tag. However, there are only two variables within the tag - argumentCollection and dsn - so either/both of these are the culprit that the error is referring to. However, neither of these belong in a cffunction tag - they should be passed in as an argument when you call the function! Also, the last few lines of your code show that you are not var scoping your variables! That needs to be fixed or it risks causing you big headaches. You can find unscoped variables using varScoper - http://varscoper.riaforge.org/ ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320172 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: I give...anything inherently wrong with this code that would cause this error?
argumentCollection is not a valid attribute for cffunction. You want to pass that in when you call the function: fnProcessForm( argumentCollection=aStructOfSomeSort ); -- Josh -Original Message- From: Rick Faircloth [mailto:r...@whitestonemedia.com] Sent: Friday, March 06, 2009 10:29 AM To: cf-talk Subject: I give...anything inherently wrong with this code that would cause this error? Here's the error from CF: "This expression must have a constant value." The compiler was processing: - A cffunction tag beginning on line 72, column 10. The error occurred in E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing.cfc, line 79. (Line 79 is: returnType = "struct") If I take out that line, then the error just references the line before it: access = "remote". Without going into a thousand lines of code upfront, I was wondering if anything was wrong with this code up to this point. I've never gotten this error before (but, then again, I've never tried to do some of the things I'm doing with this, either.) Thanks, Rick - "A government big enough to give you everything you want is big enough to take away everything you have." - Thomas Jefferson ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320171 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Re: I give...anything inherently wrong with this code that would cause this error?
argumentCollection in the cffunction tag? I don't see that in the docs. You can use it when calling the function, but not while defining it. Maybe that's what's throwing the weird error. Francois Levesque http://blog.critical-web.com/ On Fri, Mar 6, 2009 at 1:28 PM, Rick Faircloth wrote: > > Here's the error from CF: > > > > "This expression must have a constant value." > > > > The compiler was processing: > > - A cffunction tag beginning on line 72, column 10. > > The error occurred in > E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing.cfc, > line 79. > > (Line 79 is: returnType = "struct") If I take out that line, then the > error just references the line before it: access = "remote". > > > > Without going into a thousand lines of code upfront, I was wondering if > anything was wrong with this code > > up to this point. I've never gotten this error before (but, then again, > I've never tried to do some of the things > > I'm doing with this, either.) > > > > Thanks, > > > > Rick > > > > > > > displayname = > "fnProcessForm" > > argumentCollection = "#form#" > > dsn= > "#application.dsn#" > > hint = > "Processes Submitted Form" > > output = "false" > > access = > "remote" > > returnType= "struct"> > > > > > required = "yes"> > > > > > > > > > > > > > > > > > - > > "A government big enough to give you everything you want is big enough to > take away everything you have." > > - Thomas Jefferson > > > > > > ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320170 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: I give...anything inherently wrong with this code that would cause this error?
Remove this part and see if it works. argumentCollection = "#form#" -- William E. Seiter Need to have your mortgage modified? I charge no fees until I am successful, then I charge almost half the rate you would find elsewhere. Professional. Dedicated. Effective. The Easy 24/7 way to get started: http://www.goldengrove.net/ or you can call: (626) 593 - 5501 -Original Message- From: Rick Faircloth [mailto:r...@whitestonemedia.com] Sent: Friday, March 06, 2009 10:29 AM To: cf-talk Subject: I give...anything inherently wrong with this code that would cause this error? Here's the error from CF: "This expression must have a constant value." The compiler was processing: - A cffunction tag beginning on line 72, column 10. The error occurred in E:\Inetpub\webroot\wsm-dev\jQuery\ajax_file_upload_two\form_processing.cfc, line 79. (Line 79 is: returnType = "struct") If I take out that line, then the error just references the line before it: access = "remote". Without going into a thousand lines of code upfront, I was wondering if anything was wrong with this code up to this point. I've never gotten this error before (but, then again, I've never tried to do some of the things I'm doing with this, either.) Thanks, Rick - "A government big enough to give you everything you want is big enough to take away everything you have." - Thomas Jefferson ~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:320168 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4